package com.verser.weixin.test; public class Test { static InheritableThreadLocal<Object> ITL = new InheritableThreadLocal<Object>(){ protected Object initialValue() { return new StringBuffer("hello "); }; }; static ThreadLocal<Object> TL = new ThreadLocal<Object>(){ protected Object initialValue() { return new StringBuffer("HELLO "); }; }; public static void main(String[] args) throws Exception { System.out.println("Thread-t " + " , " + ITL.get() + " , " + TL.get()); Thread t_1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Thread-t_1 " + " , " + ITL.get() + " , " + TL.get()); ((StringBuffer)ITL.get()).append("wonderful "); ((StringBuffer)TL.get()).append("WONDERFUL "); Thread t_1_1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Thread-t_1_1 " + " , " + ITL.get() + " , " + TL.get()); ((StringBuffer)ITL.get()).append("world"); ((StringBuffer)TL.get()).append("WORLD"); System.out.println("Thread-t_1_1 " + " , " + ITL.get() + " , " + TL.get()); } }); t_1_1.start(); try { t_1_1.join(); System.out.println("Thread-t_1 " + " , " + ITL.get() + " , " + TL.get()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); t_1.start(); t_1.join(); System.out.println("Thread-t " + " , " + ITL.get() + " , " + TL.get()); } }
Thread-t , hello , HELLO Thread-t_1 , hello , HELLO Thread-t_1_1 , hello wonderful , HELLO Thread-t_1_1 , hello wonderful world , HELLO WORLD Thread-t_1 , hello wonderful world , HELLO WONDERFUL Thread-t , hello wonderful world , HELLO
相关推荐
三、ThreadLocal与InheritableThreadLocal的区别 1. 变量继承性:ThreadLocal不支持变量继承,子线程无法访问父线程的ThreadLocal变量;而InheritableThreadLocal支持,子线程会自动复制父线程的副本。 2. 生命...
**InheritableThreadLocal** 类与ThreadLocal类似,但其特性是当新线程被创建时(比如通过`Thread.start()`),新线程会继承父线程中InheritableThreadLocal变量的副本。这意味着在子线程中可以访问到父线程中设置的...
InheritableThreadLocal与ThreadLocal非常相似,但它增加了线程继承的特性。如果一个线程创建了一个子线程,那么子线程会继承父线程中的InheritableThreadLocal变量。这意味着子线程可以访问到父线程设置的值,这在...
Java 多线程编程之 InheritableThreadLocal ...* InheritableThreadLocal 与 ThreadLocal 的区别 * 使用 InheritableThreadLocal 需要注意的线程安全问题 * InheritableThreadLocal 在多线程编程中的应用场景和示例代码
3 TransmittableThreadLocal 的实现原理:TransmittableThreadLocal 是基于ThreadLocal 和InheritableThreadLocal 的结合,能够实现跨线程池之间的数据传递。 4 TransmittableThreadLocal 的应用场景:...
1. **会话管理**:在分布式应用中,可以使用`InheritableThreadLocal`来存储用户会话信息,确保请求在处理过程中始终与正确的会话关联。 2. **权限控制**:在线程执行的任务中,可以存储当前用户的权限信息,使得子...
InheritableThreadLocal跟ThreadLocal差不多,关键点在Thread#init方法中会对Thread中的实例变量inheritableThreadLocals进行赋值操作,将父线程的本地变量复制到子线程中 首先通过ServiceLoader.load方法生成一个...
:backhand_index_pointing_right:在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库...
Scoped Value 解决了在线程之间共享变量的问题,ThreadLocal 和 InheritableThreadLocal 都有其缺陷。ThreadLocal 需要手动清理,且变量不能被子线程继承;InheritableThreadLocal 可以共享信息,但是数据会拷贝多份...
- **InheritableThreadLocal**: 与ThreadLocal类似,但子线程可以继承父线程的值。 - **Compiler**: 提供编译运行时的类。 - **Process**: 表示操作系统进程,提供了与进程相关的操作。 - **RuntimePermission**...
#### 多线程并发与并行 - **并发**:指一个系统内多个进程或线程交替执行的过程,每个任务都可能被执行一小段时间,然后让位给其他任务,使得多个任务看起来同时运行。 - **并行**:指多个任务在同一时刻执行,通常...
在Java 2(J2SE)中,`java.lang`包添加了一些新的类和方法,如`InheritableThreadLocal`,`ThreadLocal`的扩展,使得子线程可以继承父线程的变量,以及`SecurityManager`,用于实现安全管理策略。 过时方法在Java ...
`Thread`, `Compiler`, `Process`, `ThreadGroup`, `Double`, `Runtime`, `ThreadLocal`, `Float`, `RuntimePermission`, `Throwable`, `InheritableThreadLocal`, `SecurityManager`, 和 `Void`。这些类不仅提供了...
例如在Java 2中,就增加了一些新的类如InheritableThreadLocal和Character.Subset等。这些改进让java.lang包更加丰富和强大,为Java编程提供了更广泛的支撑。在开发过程中,了解和熟悉java.lang包提供的类和接口能够...
- **InheritableThreadLocal**:继承自`ThreadLocal`,用于创建可继承的线程局部变量。 ##### java.lang.ref包下的类 - **Reference**:基类,所有引用类型都继承自该类。 - **PhantomReference**(虚引用):仅...