InheritableThreadLocal比ThreadLocal多一个特性,继承性,可以从父线程中得到初始值。
代码示例
public class TestThreadLocal { static final String VALUE01 = "VALUE01"; static final String VALUE02 = "VALUE02"; public static void main(String[] args) throws InterruptedException { ThreadLocal<String> threadLocal = new ThreadLocal<String>(); threadLocal.set(VALUE01); InheritableThreadLocal<String> inheritableThreadLocal = new InheritableThreadLocal<String>(); inheritableThreadLocal.set(VALUE01); Thread thread_1 = new Thread_TestThreadLocal(threadLocal, inheritableThreadLocal); thread_1.setName("Thread01"); thread_1.start(); thread_1.join(); System.out.println(Thread.currentThread().getName() + "******************************************"); System.out.println(Thread.currentThread().getName() + "\tThreadLocal: " + threadLocal.get()); System.out.println(Thread.currentThread().getName() + "\tInheritableThreadLocal: " + inheritableThreadLocal.get()); } } class Thread_TestThreadLocal extends Thread { ThreadLocal<String> threadLocal; InheritableThreadLocal<String> inheritableThreadLocal; public Thread_TestThreadLocal(ThreadLocal<String> threadLocal, InheritableThreadLocal<String> inheritableThreadLocal) { super(); this.threadLocal = threadLocal; this.inheritableThreadLocal = inheritableThreadLocal; } public void run() { System.out.println(Thread.currentThread().getName() + "******************************************"); System.out.println(Thread.currentThread().getName() + "\tThreadLocal: " + threadLocal.get()); System.out.println(Thread.currentThread().getName() + "\tInheritableThreadLocal: " + inheritableThreadLocal.get()); threadLocal.set(TestThreadLocal.VALUE02); inheritableThreadLocal.set(TestThreadLocal.VALUE02); System.out.println(Thread.currentThread().getName() + "(Reset Value)*****************************"); System.out.println(Thread.currentThread().getName() + "\tThreadLocal: " + threadLocal.get()); System.out.println(Thread.currentThread().getName() + "\tInheritableThreadLocal: " + inheritableThreadLocal.get()); } }
输出
Thread01******************************************
Thread01 ThreadLocal: null
Thread01 InheritableThreadLocal: VALUE01
Thread01(Reset Value)**************************
Thread01 ThreadLocal: VALUE02
Thread01 InheritableThreadLocal: VALUE02
main******************************************
main ThreadLocal: VALUE01
main InheritableThreadLocal: VALUE01
Thread01 ThreadLocal: null
Thread01 InheritableThreadLocal: VALUE01
Thread01(Reset Value)**************************
Thread01 ThreadLocal: VALUE02
Thread01 InheritableThreadLocal: VALUE02
main******************************************
main ThreadLocal: VALUE01
main InheritableThreadLocal: VALUE01
相关推荐
ThreadLocal和InheritableThreadLocal是Java中两个非常重要的线程相关的类,它们在Android开发中也有广泛应用。本文将深入解析这两个概念以及它们在Android环境下的工作原理。 **ThreadLocal** 是一个线程局部变量...
ThreadLocal和InheritableThreadLocal是Java中处理线程局部变量的两个类,它们主要用于解决多线程环境下的数据隔离问题。线程安全是并发编程中的核心问题之一,而ThreadLocal提供了一种机制,使得每个线程都有自己的...
Java 多线程编程之 InheritableThreadLocal 是一种特殊的 ThreadLocal 类,它允许子线程继承父线程中的值,从而实现了父子线程之间的值传递。 InheritableThreadLocal 的作用是当我们需要在子线程中使用父线程中的...
3 TransmittableThreadLocal 的实现原理:TransmittableThreadLocal 是基于ThreadLocal 和InheritableThreadLocal 的结合,能够实现跨线程池之间的数据传递。 4 TransmittableThreadLocal 的应用场景:...
而`InheritableThreadLocal`则在`ThreadLocal`的基础上增加了一项功能:当新线程被创建(例如通过`Thread.start()`或`ExecutorService.submit()`)时,这些新线程会自动继承其父线程中`InheritableThreadLocal`变量...
InheritableThreadLocal跟ThreadLocal差不多,关键点在Thread#init方法中会对Thread中的实例变量inheritableThreadLocals进行赋值操作,将父线程的本地变量复制到子线程中 首先通过ServiceLoader.load方法生成一个...
:backhand_index_pointing_right:在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库...
Scoped Value 解决了在线程之间共享变量的问题,ThreadLocal 和 InheritableThreadLocal 都有其缺陷。ThreadLocal 需要手动清理,且变量不能被子线程继承;InheritableThreadLocal 可以共享信息,但是数据会拷贝多份...
在Java 2(J2SE)中,`java.lang`包添加了一些新的类和方法,如`InheritableThreadLocal`,`ThreadLocal`的扩展,使得子线程可以继承父线程的变量,以及`SecurityManager`,用于实现安全管理策略。 过时方法在Java ...
它的实现基于`Thread`类中的`copyStateFrom`方法,将父线程的`ThreadLocal`值复制到子线程。 #### CyclicBarrier与CountDownLatch的不同 - **CyclicBarrier**:类似于计数器,但可以在到达特定数量的参与者后重新...
`Thread`, `Compiler`, `Process`, `ThreadGroup`, `Double`, `Runtime`, `ThreadLocal`, `Float`, `RuntimePermission`, `Throwable`, `InheritableThreadLocal`, `SecurityManager`, 和 `Void`。这些类不仅提供了...
- **InheritableThreadLocal**: 与ThreadLocal类似,但子线程可以继承父线程的值。 - **Compiler**: 提供编译运行时的类。 - **Process**: 表示操作系统进程,提供了与进程相关的操作。 - **RuntimePermission**...
例如在Java 2中,就增加了一些新的类如InheritableThreadLocal和Character.Subset等。这些改进让java.lang包更加丰富和强大,为Java编程提供了更广泛的支撑。在开发过程中,了解和熟悉java.lang包提供的类和接口能够...
17. **Thread/ThreadGroup/ThreadLocal/InheritableThreadLocal**:线程相关的类,提供了多线程编程的支持。 18. **Throwable/Error/AssertionError/LinkageError/ClassCircularityError/ClassFormatError/...