美文网首页
Java - ThreadLocal解析

Java - ThreadLocal解析

作者: _308b | 来源:发表于2018-06-15 15:11 被阅读0次

    首先声明,ThreadLocal不是用来解决共享变量问题的,而是在不同的是线程中存放该线程自身的变量(eg: session,每个线程都可以有一个session变量,但是每个线程的session变量指向的对象不一样,可以看做都是ThreadLocal变量,但是该ThreadLocal变量在不同的线程可能有不同的值)。

    这个看源码就清楚了:

    ThreadLocal#set

    首先是获取当前线程的ThreadLocalMap对象,然后以当前的ThreadLocal对象为键,需要设置的value为值。ThreadLocalMap为ThreadLocal的一个内部类,是Thread的一个属性。为什么需要用一个map来存呢?因为一个线程可以有多个ThreadLocal变量,这些ThreadLocal变量都存放在ThreadLocalMap对象中,当线程要使用某个ThreadLocal变量时,通过ThreadLocal#get方法获取本ThreadLocal变量在本线程的值

    ThreadLocal#get

    比如说有两个ThreadLocal变量:tl1,tl2;有两个Thread:t1,t2;

    在线程t1中设值:tl1.set(1),tl2.set("t1")

    在线程t2中设值:tl1.set(2),tl2.set("t2")

    获取值:

    线程t1:tl1.get() -> 1 ;tl2.get() -> "t1"

    线程t2:tl1.get() -> 2 ;tl2.get() -> "t2"

    相关文章

      网友评论

          本文标题:Java - ThreadLocal解析

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