📅  最后修改于: 2023-12-03 14:42:20.978000             🧑  作者: Mango
java.lang.InheritableThreadLocal
是Java语言中的一个类,用于创建一个能够继承父线程的线程本地变量。它是ThreadLocal
类的子类。
InheritableThreadLocal
的作用是为每个线程提供独立的变量副本,确保线程之间不会相互干扰。
InheritableThreadLocal
继承自ThreadLocal
,因此具有ThreadLocal
的所有特性和功能。ThreadLocal
不同的是,InheritableThreadLocal
的值在创建线程时可以从父线程继承,子线程可以访问父线程设置的值。InheritableThreadLocal
的修改不会影响其他线程的副本值,每个线程都有自己的副本。import java.lang.InheritableThreadLocal;
public class InheritableThreadLocalExample {
private static InheritableThreadLocal<String> threadLocal = new InheritableThreadLocal<>();
public static void main(String[] args) {
threadLocal.set("Hello, World!");
Thread childThread = new Thread(() -> {
System.out.println("Child Thread: " + threadLocal.get());
threadLocal.set("Hello from Child Thread!");
System.out.println("Child Thread (after modification): " + threadLocal.get());
});
childThread.start();
try {
childThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main Thread: " + threadLocal.get());
}
}
上述示例代码中,主线程设置了InheritableThreadLocal
的值为"Hello, World!"。子线程获取了主线程的值,并在自己的副本中修改了值。最后,主线程再次获取了自己的副本值。
运行上述代码,输出结果如下:
Child Thread: Hello, World!
Child Thread (after modification): Hello from Child Thread!
Main Thread: Hello, World!
可以看到,子线程成功继承了父线程的副本值,并且对副本值的修改只在子线程中生效,不影响父线程的副本值。
InheritableThreadLocal
提供了一种在多线程环境下为每个线程创建独立副本的方式,并能在线程之间传递父线程的副本值。使用InheritableThreadLocal
可以方便地实现线程间的数据隔离和共享,并避免了线程安全问题。