java进阶之路-java中的threadlocal源码实现
Posted LuckyZhouStar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java进阶之路-java中的threadlocal源码实现相关的知识,希望对你有一定的参考价值。
原文参考:彻底理解ThreadLocal(看这篇文章就够了)
ThreadLocal父子线程传递实现方案
小结
1、threadloca内部维护了一个 map对象,threadlocalmap,key是当前的线程对象thread,value就是set的值
2、thread类内部有一个ThreadLocal.ThreadLocalMap,其实就是threadlocal内部的维护的类,两者是一个,所以这个map是每个对象私有的
3、一个thread维护多个threadlocal,value如何区分,threadlocal内部维护了一个nextHashCode属性,每次都是院子自增,set的时候,会进行key.threadLocalHashCode & (len-1),操作,所以是可以区分出value值的。
4、为何内部的map不用thread作为key来存储呢,线程不安全,需要考虑线程的维护,多个线程操作一个map,需要考虑状态的同步,效率比较低下
5、如果想在子线程中获取父线程的值怎么办,提供了InheritableThreadLocal,在创建的时候,会把父线程的值copy一份到自己的map中,这样就解决了上述的问题
以上是关于java进阶之路-java中的threadlocal源码实现的主要内容,如果未能解决你的问题,请参考以下文章