最近学习Java的线程,接触了ThreadLocal,感觉还是有一些难度,所以上网查了一些资料。
ThreadLocal的作用是为每一个线程保存单独的变量副本,乍一看,似乎是又这样的实现:
每一个ThreadLocal的实体中维护了一个Map,当每个线程去调用threadLocal.set(T)方法时,似乎是把<Thread,Value>这样的一一对键值对放到了Map里,而且看了一些网上的资料也是这么解释的,但是经过查看源码,我发现这是错误的!
JDK中有这样的实现:
1.ThreadLocal中定义了内部类ThreadLocalMap ,它的Entry实现是继承自WeakReferences的()
2.这是整个设计的关键,真相是每一个Thead中有如下的局部变量定义
3.当调用ThreadLocal的set方法是,是把对应的线程的threadLocals变量中加入<ThreadLocal,Value>这样的键值对,也就是其实Thread享用的局部变量还是由本身来维护的。
以上是一点点发现,也没有太深入的去了解,希望大家多多指点!
分享到:
相关推荐
Java中ThreadLocal的设计与使用.doc
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露
java 简单的ThreadLocal示例
java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...
NULL 博文链接:https://justsee.iteye.com/blog/791919
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
主要介绍了java 中ThreadLocal 的正确用法的相关资料,需要的朋友可以参考下
主要介绍了java 中ThreadLocal实例分析的相关资料,需要的朋友可以参考下
java的ThreadLocal[整理].pdf
一篇文章我们来分析一个Java中ThreadLocal内存泄露的案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。
Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal Java资料—详解ThreadLocal
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。使用这个工具类可以很简洁地编写出优美的多线程程序。接下来通过本文给大家介绍Java中的ThreadLocal,需要的朋友可以参考下
主要介绍了彻底理解Java 中的ThreadLocal的相关资料,需要的朋友可以参考下
深入研究java.lang.ThreadLocal类。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是 threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。
主要介绍了快速了解Java中ThreadLocal类,介绍了ThreadLocal 是什么,ThreadLocal的作用,ThreadLocal 原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
简单分析Java线程编程中ThreadLocal类的使用共4页.pdf.zip
主要介绍了java 中ThreadLocal本地线程和同步机制的比较的相关资料,需要的朋友可以参考下
NULL 博文链接:https://bijian1013.iteye.com/blog/2380233
什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突...
我们可以看到,通过这段代码实例化了一个ThreadLocal对象。我们只需要实例化对象一次,并且也不需要知道它是被哪个线程实例化。虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程却只能访问到自己通过调用...