ThreadLocal有个缺陷,在子线程里无法访问父线程的变量,
InheritableThreadLocal 解决了这个问题,自动会把父线程的变量传递个子线程,
子线程只能用,修改了不会影响父线程的东西
这里仍然需要注意并发实现~
public class Test {
private final static InheritableThreadLocal<String> holder = new InheritableThreadLocal<String>();
public static void main(String[] args){
holder.set("aaa");
System.out.println("begin=" + holder.get());
Thread a = new Thread(){
public void run() {
System.out.println("thread-begin=" + holder.get());
holder.set("vvvvvvvvvvvvv");
System.out.println("thread-end=" + holder.get());
}
};
a.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("end=" + holder.get());
分享到:
相关推荐
在Java编程中,线程局部变量(ThreadLocal)和可继承线程局部变量(InheritableThreadLocal)是两种非常重要的工具,它们允许我们在多线程环境中创建独立于线程的局部变量,确保每个线程拥有自己的变量副本,避免了...
Java中的`InheritableThreadLocal`是线程局部变量的一个扩展,它允许子线程继承父线程中`InheritableThreadLocal`实例的值。这个特性在开发框架和中间件时尤其有用,因为它可以方便地传递上下文信息,如会话状态、...
**InheritableThreadLocal** 类与ThreadLocal类似,但其特性是当新线程被创建时(比如通过`Thread.start()`),新线程会继承父线程中InheritableThreadLocal变量的副本。这意味着在子线程中可以访问到父线程中设置的...
ThreadLocal和InheritableThreadLocal是Java中处理线程局部变量的两个类,它们主要用于解决多线程环境下的数据隔离问题。线程安全是并发编程中的核心问题之一,当多个线程访问同一份共享资源时,可能会导致数据不...
Scoped Value 解决了在线程之间共享变量的问题,ThreadLocal 和 InheritableThreadLocal 都有其缺陷。ThreadLocal 需要手动清理,且变量不能被子线程继承;InheritableThreadLocal 可以共享信息,但是数据会拷贝多份...
**其他并发工具类与锁原理**:这部分内容涉及ThreadLocal的工作原理、InheritableThreadLocal如何传递线程局部变量、CyclicBarrier和CountDownLatch的区别与用法、Semaphore信号量机制、CopyOnWriteArrayList如何...
`InheritableThreadLocal`允许子线程继承父线程中的变量值。它的实现基于`Thread`类中的`copyStateFrom`方法,将父线程的`ThreadLocal`值复制到子线程。 #### CyclicBarrier与CountDownLatch的不同 - **...
- **InheritableThreadLocal**:继承自`ThreadLocal`,用于创建可继承的线程局部变量。 ##### java.lang.ref包下的类 - **Reference**:基类,所有引用类型都继承自该类。 - **PhantomReference**(虚引用):仅...
在Java 2(J2SE)中,`java.lang`包添加了一些新的类和方法,如`InheritableThreadLocal`,`ThreadLocal`的扩展,使得子线程可以继承父线程的变量,以及`SecurityManager`,用于实现安全管理策略。 过时方法在Java ...
- **InheritableThreadLocal**: 与ThreadLocal类似,但子线程可以继承父线程的值。 - **Compiler**: 提供编译运行时的类。 - **Process**: 表示操作系统进程,提供了与进程相关的操作。 - **RuntimePermission**...
java.lang包还包含了一些与安全、线程和内存管理相关的类,如SecurityManager用于安全管理,Thread和ThreadGroup是线程相关的类,ClassLoader负责加载类,ThreadLocal为每个线程提供独立的变量副本,而Runtime类提供...
- ThreadLocal:用于提供线程内部的局部变量。 6. 实用工具类: - String:表示字符串,提供了丰富的字符串操作方法。 - StringBuffer:表示字符序列,与String不同,StringBuffer是可变的,适合频繁修改的场景...
InheritableThreadLocal跟ThreadLocal差不多,关键点在Thread#init方法中会对Thread中的实例变量inheritableThreadLocals进行赋值操作,将父线程的本地变量复制到子线程中 首先通过ServiceLoader.load方法生成一个...