今天听一位大神提到线程安全与ThreadLocal,由于对ThreadLocal不太了解,就上网搜了一下,看到了很多人的文章,写得很复杂,众说纷纭,于是自己去看了下Oracle的文档,关于ThreadLocal有下面一段话。
This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).
翻译:这个类提供[本地线程]的变量。这些变量每个都有不同的副本,各个线程访问某一个变量的时候(通过set或get方法),都与得到一个它(当前线程)自己的,单独初始化的变量副本。ThreadLocal实例的典型用法是作为一个私有静态(private static)变量,与一个线程的状态相关联。(如用户ID,事务ID等等)
我想这个问题远没有那么复杂,其实可以简单的理解成,当有一个类A的实例a(注意这个实例不是ThreadLocal实例)需要被多线程访问的时候,如果想根据不同的Thread有不同的标识或者状态的话,那么就需要一个这样的变量(ThreadLocal实例,实例a的私有静态变量),来保存所有Thread的标识(用ThreadLocalMap来保存,key的个数就是当前活动的访问该实例a的线程数)。
为什么用ThreadLocal?
这个每个Thread不同的标识可能是根据Thread计算得来的,也可能是从数据库得来的值,所以每次用的时候都去取是不现实的,所以需要保存起来,等下次用到的时候直接拿来用。
Oracle的官方文档写得很明白,而且也有例子,这个类跟线程同步完全没有任何概念上的类似,完完全全两个问题,因为它不需要同步,它保存的正是每个线程不同之处。
Oracle文档出处:http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html
分享到:
相关推荐
Java中ThreadLocal的设计与使用.doc
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露
NULL 博文链接:https://justsee.iteye.com/blog/791919
主要介绍了java 中ThreadLocal 的正确用法的相关资料,需要的朋友可以参考下
主要介绍了java 中ThreadLocal实例分析的相关资料,需要的朋友可以参考下
一篇文章我们来分析一个Java中ThreadLocal内存泄露的案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。
主要介绍了java 中ThreadLocal本地线程和同步机制的比较的相关资料,需要的朋友可以参考下
主要介绍了快速了解Java中ThreadLocal类,介绍了ThreadLocal 是什么,ThreadLocal的作用,ThreadLocal 原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...
java 简单的ThreadLocal示例
ThreadLocal为解决多线程程序的并发问题提供了一种新的思路,ThreadLocal并不是一个Thread,而是Thread的局部变量,本文就来深入解析Java中ThreadLocal线程类的作用和用法.
什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突...
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。使用这个工具类可以很简洁地编写出优美的多线程程序。接下来通过本文给大家介绍Java中的ThreadLocal,需要的朋友可以参考下
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
java的ThreadLocal[整理].pdf
Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal ;Java资料—详解ThreadLocal Java资料—详解ThreadLocal
Java中ThreadLocal工具类(解决多线程程序中并发问题的一种新思路,主要为参数的拷贝问题),感兴趣的话可以查看博文,博文地址:http://blog.csdn.net/otengyue/article/details/38459327
主要介绍了彻底理解Java 中的ThreadLocal的相关资料,需要的朋友可以参考下
深入研究java.lang.ThreadLocal类。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是 threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。
简单分析Java线程编程中ThreadLocal类的使用共4页.pdf.zip