`
hz_chenwenbiao
  • 浏览: 995524 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jdk6标准类库源码解读 之 java.lang(二) ThreadLocal<T>(转)

阅读更多

ThreadLocal<T>

  • ThreadLocal中的基本存储结构是ThreadLocalMap。其中使用到了一个基础对象:WeakReference<T>,WeakReference(弱引用)指当需要某个指向某对象的引用,但又不影响此对象的垃圾收集,应该使用此对象代替一般的 reference。即,这个对象在除了WeakReference以外没有其他引用指向时,可以被垃圾回收,此时弱引用会变为null值。
  • ThreadLocalMap使用和普通Map相同的方式,只是每个元素都是WeakReference的子类。保证线程回收时,对象能够被垃圾回收。
     static class Entry extends WeakReference<ThreadLocal> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal k, Object v) {
                super(k);
                value = v;
            }
        }

 

 

  • ThreadLocal中的ThreadLocalMap是被注入存储到Thread中的。ThreadLocalMap的key是ThreadLocal本身(属性进行某种运算得到),而value是不同的ThreadLocal对应的set方法设置的值。每个Thread只会有一个ThreadLocalMap。需要注意的就是,ThreadLocal不是一个存储结构,也不会包含存储结构所以ThreadLocal可以理解为一个帮助线程存储数据的工具类。
  • public class Thread implements Runnable {
         ...
    
        /*
         * ThreadLocal values pertaining to this thread. This map is maintained by the ThreadLocal
         * class.
         */
        ThreadLocal.ThreadLocalMap threadLocals = null;
    
        ...
    }
    
    public class ThreadLocal<T> {
         ...
    
        public void set(T value) {
            Thread t = Thread.currentThread();
            ThreadLocalMap map = getMap(t);
            if (map != null)
                map.set(this, value);
            else
                createMap(t, value);
        }
    
        void createMap(Thread t, T firstValue) {
            t.threadLocals = new ThreadLocalMap(this, firstValue);
        }
        ...
    }

     

    get方法是直接取当前Thread的ThreadLocalMap中,当前ThreadLocal对应的值。

        public T get() {
            Thread t = Thread.currentThread();
            ThreadLocalMap map = getMap(t);
            if (map != null) {
                ThreadLocalMap.Entry e = map.getEntry(this);
                if (e != null)
                    return (T) e.value;
            }
            return setInitialValue();
        }

     

     

    出处:http://wu-sheng.iteye.com/blog/946240

    分享到:
    评论

    相关推荐

      jdk10+ java.lang.NoClassDefFoundError: javax/xml/ws/Service 错误

      jdk升级之后出现异常:java.lang.NoClassDefFoundError: javax/xml/ws/Service 1、解决方案jdk降级至1.8之前 2、由于JDK9以后,去除了javax.xml包需要引入对应的jar包 &lt;dependency&gt; &lt;groupId&gt;javax.activation&lt;/...

      基于JSP新闻发布系统

      &lt;br&gt;&lt;br&gt;本系统是WEB模式的新闻发布管理系统&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;后台数据库:MySql\Access&lt;br&gt;&lt;br&gt;系统主要完成的功能如下:&lt;br&gt;&lt;br&gt;管理员(后台)&lt;br&gt;.系统管理:用户...

      基于JSP的实验室教学管理系统

      实验室教学管理系统(Web版 全套源码 安装即用)&lt;br&gt;&lt;br&gt;本系统是一个完整的JSP-JAVA应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。&lt;br&gt;&lt;br&gt;系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出...

      java反编译工具jad 1.5.8g(可以反编译jdk1.5,1.6)

      For example:&lt;br&gt;&lt;br&gt; jad -o -dtest -sjava *.class&lt;br&gt;&lt;br&gt; (or jad -o -d test -s java *.class, which has the same effect)&lt;br&gt;&lt;br&gt;This command decompiles all .class files in the current directory &lt;br&gt;...

      JDK1.8【函数式接口】【定义与使用】【源码】

      JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....

      实验室教学管理系统

      实验室教学管理系统(Web版 全套源码 安装即用)&lt;br&gt;&lt;br&gt;本系统是一个完整的JSP-JAVA应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。&lt;br&gt;&lt;br&gt;系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出...

      基于JSP的在线考试系统

      &lt;br&gt;&lt;br&gt;本系统是Web模式的在线考试管理系统&lt;br&gt;&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;&lt;br&gt;后台数据库:MS-Access&lt;br&gt;&lt;br&gt;系统主要完成的功能如下:&lt;br&gt;&lt;br&gt;.基本信息管理 考生...

      jsp航空订票系统

      &lt;br&gt;&lt;br&gt;本系统是WEB模式的航空订票系统管理系统&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;后台数据库:MS-Access&lt;br&gt;&lt;br&gt;系统主要完成的功能如下:&lt;br&gt;&lt;br&gt; _订票信息管理功能 _客机信息...

      基于JSP的办公自动化系统

      &lt;br&gt;&lt;br&gt;本系统是Web模式的办公自动化系统&lt;br&gt;&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;后台数据库:MS-Access&lt;br&gt;&lt;br&gt;系统主要功能简介:&lt;br&gt;&lt;br&gt;.信息中心 &lt;br&gt;&lt;br&gt;.内部电子邮件&lt;br&gt;...

      java.lang.UnsupportedClassVersionError问题的解决方法

      &lt;br&gt;二、如果运行时有以上提示,则选择"Project"菜单中的"Project Properties",在弹出的窗口中左侧选择“ Build--&gt;Java”,在右边的选项中有四个下拉框,就可以看到编译选项了,其中Compiler和Debug Option可以不用...

      spring boot2快速导出excel的java工具类demo源码:export-excel

      spring boot2快速导出excel的示例源码 操作系统:windows10 JAVA jdk:1.8 开发工具:IDEA java架构:spring boot 2.1.6 gitHub:https://github.com/cn-h-jar/exportexcel 作者:jar 运行提示: 启动项目...

      java.lang.OutOfMemoryError: PermGen space解决方案

      java.lang.OutOfMemoryError: PermGen space 解决方案

      解决 java.lang.RuntimeException: Could not generate DH keypair异常处理所需的bcprov的jar

      解决 java.lang.RuntimeException: Could not generate DH keypair异常处理。 bcprov-ext-jdk15on-1.60、bcprov-jdk15on-1.60两个包放到jre下的$JAVA_HOME/jre/lib/ext的路径下,然后配置$JAVA_HOME/jre/lib/...

      aspose-words-16.8.0-jdk16.jar 亲测可用版,无水印

      &lt;Signature&gt;sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=&lt;/Signature&gt; ...

      解决java.lang.SecurityException: JCE cannot authenticate the provider BC问题

      在与银联的对接中,调试过程中报错或使用类似登入加密:java.lang.SecurityException: JCE cannot authenticate the provider BC 进行问题解决,里面包含 bcprov-jdk16-143.jar与bcprov-jdk15-135.jar与具体文件存放...

      jce 等jar

      当前rar包包含:&lt;br&gt;Gateway_stop.jar&lt;br&gt;j2ee.jar&lt;br&gt;jce-jdk13-120.jar&lt;br&gt;jgss.jar&lt;br&gt;log4j-1.2.8.jar&lt;br&gt;mail.jar&lt;br&gt;msbase.jar&lt;br&gt;mssqlserver.jar&lt;br&gt;msutil.jar&lt;br&gt;puretls.jar&lt;br&gt;servlet.jar&lt;br&gt;...

      航空订票信息管理系统

      &lt;br&gt;&lt;br&gt;本系统是WEB模式的航空订票系统管理系统&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;后台数据库:MS-Access&lt;br&gt;&lt;br&gt;系统主要完成的功能如下:&lt;br&gt;&lt;br&gt; _订票信息管理功能 _客机信息...

      JDK7新特性(完整篇)

      1.2 JDK7新特性&lt;二&gt; 语法 . . . . . . . . . . . . . 1.3 JDK7新特性&lt;三&gt; JDBC4.1 . . . . . . . . . . 1.4 JDK7新特性&lt;四&gt; NIO2.0 文件系统 . . . 1.5 JDK7新特性&lt;五&gt; fork/join 框架 . . . . . 1.6 JDK7新特性...

      二级(Java语言程序设计)考试大纲

      &lt;font size="3"&gt;&lt;font color="#ff0000"&gt;考试内容 &lt;br /&gt;&lt;/font&gt;&lt;strong&gt;一、Java语言的特点和实现机制&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;二、Java体系结构&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.JDK目录结构。&lt;br /&gt;2.Java的API结构...

    Global site tag (gtag.js) - Google Analytics