zoukankan      html  css  js  c++  java
  • ThreadLocal之我见

      一直都对ThreadLocal类感觉隔层纱似的,因为在开发中几乎是没有用到过,也大体知道他是用来保存一个线程范围内有效的变量。甚至觉着它的实现就是类似于一个map,以线程id作为key,要保存的变量作为value。但当时看源代码,并不是自己想象的那样。由于几乎不用也一直没仔细看看源码。今天偶然的机会仔细的看了一下源代码,但它的关系结构跟自己想象的出入很大,这是我简单绘制的一个关系图:

      简单描述下就是,Thread对象有一个指向ThreadLocalMap实例的threadLocals成员,ThreadLocalMap有一个Entry数组用来盛放数据,Entry的key是ThreadLocal实例,value就是本地线程变量。

      其实说白了,不同线程的本地线程变量都是绑定在自己身上的,并没有统一放在一起。而ThreadLocal实例仅仅是作为entry的key。ThreadLocal实例是被多个线程共享作为entry的key的。用ThreadLocal作为entry的key确实让我感到莫名其妙,也一下子想不明白为何如此设计呢?

      以下是我的个人见解:

      第一,可以做到一个线程有多个threadlocal实例作为key,也就可以有多个本地线程变量了。如果以线程id为key的map形式保存本地线程变量就只能是一个了。

      第二,本地线程变量都是私有携带在线程实例里边,仅仅是以线程共享的threadlocal实例作为key。所以访问、移除本地线程变量时,就不存在任何并发同步问题了。

  • 相关阅读:
    HNCU 1746: 算法4-1,4-3:定位子串
    HNCU 1330: 算法3-1:八进制数
    HNCU 1741: 算法3-2:行编辑程序
    51NOD 1073 约瑟夫环
    约瑟夫问题
    HNCU1325: 算法2-3~2-6:Big Bang(静态链表)
    指针知识复习
    html----学完总结
    html7---转载---为何img,input等内联元素可以设置高度与宽度
    html6---转载---块级元素与行内元素
  • 原文地址:https://www.cnblogs.com/metoy/p/3936128.html
Copyright © 2011-2022 走看看