InheritableThreadLocal用法与ThreadLocal的区别
来源:互联网 发布:js页面载入事件 编辑:程序博客网 时间:2024/04/30 16:21
public class TestThreadLocal {static final String VALUE01 = "test01";static final String VALUE02 = "test02";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() {// 下面的输出就是说是了InheritableThreadLocal的用法,这里threadLocal输出的是null,因是这是一个新的线程。//而InheritableThreadlocal不是空,它把原来线程的初始化值携带过来了。System.out.println(Thread.currentThread().getName() + "\tThreadLocal: " + threadLocal.get());System.out.println(Thread.currentThread().getName() + "\tInheritableThreadLocal: " + inheritableThreadLocal.get());}}
打印结果:
Thread01 ThreadLocal: null
Thread01 InheritableThreadLocal: test01main******************************************
main ThreadLocal: test01
main InheritableThreadLocal: test01
InheritableThreadLocal
该类扩展了 ThreadLocal,为子线程提供从父线程那里继承的值:在创建子线程时,子线程会接收所有可继承的线程局部变量的初始值,以获得父线程所具有的值。通常,子线程的值与父线程的值是一致的;但是,通过重写这个类中的 childValue 方法,子线程的值可以作为父线程值的一个任意函数。
当必须将变量(如用户 ID 和 事务 ID)中维护的每线程属性(per-thread-attribute)自动传送给创建的所有子线程时,应尽可能地采用可继承的线程局部变量,而不是采用普通的线程局部变量。
0 0
- InheritableThreadLocal用法与ThreadLocal的区别
- threadlocal与inheritableThreadLocal的区别
- ThreadLocal和InheritableThreadLocal的区别
- ThreadLocal与InheritableThreadLocal的使用
- ThreadLocal与InheritableThreadLocal的使用
- InheritableThreadLocal-- 特殊的ThreadLocal
- ThreadLocal与InheritableThreadLocal学习笔记
- ThreadLocal和InheritableThreadLocal的使用
- ThreadLocal和InheritableThreadLocal的使用
- ThreadLocal和InheritableThreadLocal的使用
- ThreadLocal & InheritableThreadLocal
- ThreadLocal用法及与Synchronized的区别
- InheritableThreadLocal的认识--一种可继承的ThreadLocal
- Java多线程编程3--线程间通信--类ThreadLocal与类InheritableThreadLocal的使用
- ThreadLocal&InheritableThreadLocal解惑
- InheritableThreadLocal和ThreadLocal
- Java多线程之ThreadLocal和InheritableThreadLocal的使用
- Java多线程之通过管道线程间通信(字节流、字符流),类ThreadLocal与类InheritableThreadLocal的使用
- Flume1.7.0的TaildirSource介绍
- 【Python3】【老司机系列】日本dmm网站抓取(一)
- 由Android Toast 到 ThreadLocal的思考
- ArrayDeque源码解析
- 深度学习史上最全总结(文末有福利)
- InheritableThreadLocal用法与ThreadLocal的区别
- 可以直接获取id对象
- 判断number时最好用正则
- 中国剩余定理
- 小知识(1)
- 可能是讲解Android事件分发最好的文章
- 我的第一篇博客,linux的中文输入设置
- firstChild,nextSibling,childNodes等属性的问题
- MFC误报内存泄露的修复