Java并发编程之ThreadLocal源码分析(5)

  除了第一句代码,后面的是不是好像都在哪里见过啊?可不是!不就是上面的set()方法吗?这个方法我们只需要关注initialValue()方法...而这个initialValue()方法是需要我们自己重写的。

  小结一下:如果ThreadLocalMap中有ThreadLocal对应的值,取Entry对象的value值;如果ThreadLocalMap为null,三步走!初始化,将初始化后的对象放入ThreadLocalMap中,返回初始化后的对象。

5 ThreadLocal总结

  很感谢您能耐心的看到这里,我们最后再总结一下ThreadLoacl的实现机制。
  在Thread类中存在一个ThreaLocalMap变量,ThreadLocalMap中又有一个Entry类型的数组,而这个Entry对象则以ThreadLocal的弱引用为key。当我们调用ThreadLocal的get()方法时,会先获取当前线程的ThreadLocalMap对象,并将当前ThreadLocal对象作为key(实际上key为ThreadLocal的弱引用),去它的Entry数组中寻找我们需要的value。就这是我们说ThreadLocal为每个线程创建了一个变量副本的意思,线程对自己ThreadLocalMap中的值进行操作时,并不会对其它线程造成影响。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d288123c4a13fedc48b5d93f52b5e9ed.html