`
aty
  • 浏览: 36522 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK的ThreadLocal理解(二.2)原理篇

阅读更多

 

上一遍博客

http://aty.iteye.com/blog/1913734 写道
JDK的ThreadLocal理解(一)使用和测试

 ,对TheadLocal的测试和使用进行了介绍,这一步将介绍一下ThreadLocal的实现原理。

现在附上JDK的ThreadLocal的set方法源码

 

 
public void set(T value) 
{
        //获取当前进入该方法的线程
        Thread t = Thread.currentThread();
       
        //取出当前线程的私有变量map
        ThreadLocalMap map = getMap(t);

        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
}

ThreadLocalMap getMap(Thread t) 
{
        return t.threadLocals;
 }

void createMap(Thread t, T firstValue) {
        t.threadLocals = new ThreadLocalMap(this, firstValue);
   }

 

 

t.threadLocals的含义:参考Thread的源代码

 

 /* ThreadLocal values pertaining to this thread. This map is maintained
     * by the ThreadLocal class. */
 ThreadLocal.ThreadLocalMap threadLocals = null;

 细心阅读Thread源代码会发现:Thread类有1个实例变量,每创建1个线程对象都会拥有自己的成员变量,不存在数据共享问题。

1、细心阅读Thread的源代码就会发现,JDK只是定义(声明)了该变量并赋予初值null,但是不会创建ThreadLocal.ThreadLocalMap对象,这是因为: 创建1个线程的时候,大多数时候我们是不使用这个变量的。所以这样做可以减少不必要的对象创建,减少创建线程的开销

2、ThreadLocal.ThreadLocalMap threadLocals的创建(生成对象)是在ThreadLocal中的。这是因为:ThreadLocal.ThreadLocalMap threadLocals就是为了ThreadLocal服务的,除了ThreadLocal,没有别的地方会需要使用Thread类的这个成员变量。

 


 

 

分享到:
评论

相关推荐

    JDK的ThreadLocal理解(一)使用和测试

    **标题:“JDK的ThreadLocal理解(一)使用和测试”** **正文:** ThreadLocal是Java中的一个非常重要的线程安全工具类,它在多线程编程中扮演着独特的角色。通过创建ThreadLocal实例,我们可以为每个线程提供一个...

    理解threadlocal

    #### 二、ThreadLocal的工作原理 在深入探讨`ThreadLocal`的使用之前,我们需要理解它是如何工作的。`ThreadLocal`的核心机制是利用了一个内部的`Map`结构,用来存储不同线程对应的变量副本。在这个`Map`中,每个...

    ThreadLocal_ThreadLocal源码分析_

    **ThreadLocal概述** ThreadLocal是Java中的一个线程局部变量类,它...通过理解ThreadLocal的原理和最佳实践,我们可以更有效地利用它来解决多线程环境下的数据隔离问题,同时也需要注意防止可能出现的内存泄漏风险。

    【2018最新最详细】并发多线程教程

    18.一篇文章,从源码深入详解ThreadLocal内存泄漏问题 19.并发容器之BlockingQueue 20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解 21.线程池ThreadPoolExecutor实现原理 22.线程池之...

    Java+JDK+7 Learning notes.zip_java_jdk

    6. 文件系统API(NIO.2):提供了新的文件操作API,支持异步I/O,文件路径操作,文件属性查询等。 7. Type Inference for Generic Instance Creation:通过“钻石操作符”简化泛型实例化。 三、Java内存模型与垃圾...

    ThreadLocal

    ThreadLocal的工作原理相对简单:每个线程在创建时,都会自动创建一个ThreadLocalMap,这个映射表用于存储每个ThreadLocal对象对应的值。当一个线程调用ThreadLocal的`set`方法时,实际上是将值存入了当前线程的...

    Java并发编程原理与实战

    ThreadLocal 使用及实现原理.mp4 并发工具类CountDownLatch详解.mp4 并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 CountDownLatch,CyclicBarrier,Semaphore源码解析....

    深入理解ThreadLocal工作原理及使用示例

    深入理解ThreadLocal工作原理及使用示例 ThreadLocal是Java提供的一种解决多线程程序并发问题的工具类,自JDK1.2版本以来提供了java.lang.ThreadLocal类。ThreadLocal的主要作用是为每个使用该变量的线程提供独立的...

    JDK10(JDK10底层C++源码及hotspot虚拟机源码)

    4. **ThreadLocal握手机制的改进**:为了解决内存泄漏问题,JDK10对`ThreadLocal`进行了优化,当线程结束时会自动清理相关的存储空间。 接下来,我们转向HotSpot虚拟机,它是Java运行时环境的核心组成部分。HotSpot...

    jdk 中文帮助文档

    这份"JDK中文帮助文档"对于Java程序员来说至关重要,它提供了详尽的API(Application Programming Interface)文档、教程以及技术指南,帮助开发者理解并熟练运用Java平台。 1. **Java API 文档**:这是JDK中文帮助...

    ThreadLocal详解

    ### ThreadLocal详解:Java多线程中的线程局部变量 #### 重要概念解析:ThreadLocal在Java多线程中的角色 ...理解并掌握ThreadLocal的工作原理和使用技巧,对于Java开发者而言,是提高多线程编程水平的关键步骤之一。

    jdk1.8 全部源码,包括sun

    2. **Stream API**:Stream API是处理集合数据的新方式,它支持序列和并行操作,使得数据处理更加高效和易于理解。可以进行过滤、映射、归约等操作,常用于大数据处理和并行计算。 3. **默认方法**:在接口中引入了...

    彻底理解Java 中的ThreadLocal

    ThreadLocal的工作原理是通过一个内部的Map来存储每个线程的变量副本。这个Map的键是线程对象,值是线程的变量副本。例如,以下是一个简单的ThreadLocal示例,用于生成线程安全的序列号: ```java private static ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. ...

    Spring 2.0 开发参考手册

    13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 ...

    spring chm文档

    13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: RequestToViewNameTranslator 13.12. 其它资源 14. 集成视图技术 14.1. 简介 14.2. JSP和JSTL 14.2.1. 视图解析器 14.2.2. 'Plain-...

    Spring中文帮助文档

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons标签 13.9.8. password标签 13.9.9. select标签 13.9.10. option标签 ...

    Spring API

    11.7.2. 处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中...

    2020版Java多线程 21 道.pdf

    17. **synchronized底层实现原理**:synchronized在JVM层面通过monitorenter和monitorexit指令实现,而在JDK 1.6之后引入了偏向锁、轻量级锁等优化机制。 18. **synchronized和volatile的区别**:synchronized提供...

    Android 详解ThreadLocal及InheritableThreadLocal

    ThreadLocal的工作原理是为每个线程创建一个单独的副本,当调用ThreadLocal的`set()`方法时,实际上是将值存储在当前线程的ThreadLocalMap中,而这个Map是作为Thread类的一个成员变量存在的。当我们切换到另一个线程...

Global site tag (gtag.js) - Google Analytics