美文网首页thunisoft成长快乐!
ThreadLocal的个人理解

ThreadLocal的个人理解

作者: cmlong_ | 来源:发表于2016-12-10 21:37 被阅读16次

        今天ImportNew看了一篇文章,提到了ThreadLocal,引起了我的好奇心。对ThreadLocal进行了些许了解,在此总结一下。

    原理

        Thread类中有有一个成员变量ThreadLocal.ThreadLocalMap,是ThreadLocal的内部类。ThreadLocal对象通过当前Thread对象,向Thread对象中的ThreadLocalMap对象put值,key是ThreadLocal对象。源码很简单,Thread和ThreadLocal稍微看一下就理解了。因此,通过ThreadLocal Put值的时候,实际上是往每一个Thread对象中的ThreadLocalMap放了一遍。

        通过原理也可以看出通过ThreadLocal Put的值实际上是存在了Thread的ThreadLocalMap中,它是与Thread有相同生命周期的。

    使用场景

        举例:两个线程,各自访问各自的实例(比如session),并且这两个两个线程在执行的过程中需要用到很多对象,这些对象的很多地方都用到了session。(用例不好,个人认为理解道理就可以了)

    总结

        1.每个线程都有自己的ThreadLocalMap,存放自己的对象,与其它线程无关

        2.将ThreadLocal作为Key,将不同的对象的引用放入到不同的线程的ThreadLocalMap中,降低了对象传递的麻烦。

    误区纠正

        之前看到文章说是ThreadLocal是用来解多线程对象共享的问题的。其中有依据很经典的话“一个是锁机制进行时间换空间,一个是存储拷贝进行空间换时间”。这句话本身是没有问题的,但是作者认为ThreadLocal对对象进行了拷贝,其实并不是这样的,而是为每个线程创建了一个对象引用,如果创建的引用是不变的话,还是解决不了多线程对象共享的问题。

    相关文章

      网友评论

        本文标题:ThreadLocal的个人理解

        本文链接:https://www.haomeiwen.com/subject/sylumttx.html