1 TreadLocal的作用是什么?
并发问题的实质是多个线程想要写同一个变量,那么如果给多个线程创建不同的变量,这个问题就解决了。
类似局部变量的思路,所以叫线程局部变量。
比如用户访问网站,每个用户一个userid,那么各个线程用自己的userid,互不影响。
2 使用TreadLocal和直接使用局部变量,有什么不同?
threadlocal 提供了和线程操作相关的代理接口
3 TreadLocal 如何实现这个功能?
TreadLocal 相当于一个持有变量的容器。
他创建一个hash表,就是TreadLocalMap,这个map是用动态寻址法解决hash冲突的,来存放key,是TreadLocal对象,value,就是这个变量值。
4 ThreadLocalMap 的作用是什么?
TreadLocalMap 的 entry是extends Weak Reference的。因此,如果当前TreadLocal所在的thread运行结束,那么GC就会回收这个entry。
ThreadLocalMap 是TreadLocal的一个内部类。
Tread持有TreadLocal.TreadLocalMap, 来保存threadlocal 对象和变量的值。
总结
当一个线程想要持有一份只属于他的变量副本时,就使用TreadLocal。这个变量会保存在TreadLocal.threadLocalMap 中。