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中,这样就解决了上述的问题

发布了372 篇原创文章 · 获赞 349 · 访问量 94万+

猜你喜欢

转载自blog.csdn.net/ZHOUCHAOQIANG/article/details/99302242