ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不来自是一个Thread,而是Thr360问答ead的局部变量。
ThreadLocal是Thread的局部变量。所以,在Java中编写线程局部变量的代码相对最克培依限来说要笨拙一些,因此造成线程局部变量没有在Java开发者中得到很好的普及。
ThreadLo十读清显胜用cal的接口方法:
T审观胡字朝满种音检hreadLocal类接口很简单,只有4个方法,先来了解一下:
voidset(Objectvalue)
publicvoidremove()
将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK1.5新增的方法。需要指被冷奏风吃环年出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,所以显式调用该方法清除线程的局部变量并不是必须的操作,但它可以加快内存回收的速度。
protectedObject良initialValue()
返回该线程局部变量的初始值,该方法是一个protected的方法,显然是为了让子类覆盖而设计的。这个方法是一个延迟调用方法,在线程第1次调用get()或set(Object)时才执行,并且仅执行1站南七左三材解结海装吧次。ThreadLocal中的缺省实现直接返回一个null。
值得一提的是,在JDK5.0中,ThreadLocal已经支持泛甚府型,该类的类名已经变为ThreadLocal
ThreadLocal为每一个线程维护变量的副落约采负宁弦管围本的思路:
在ThreadL适块再两取题鲁张ocal类中定义了一个ThreadLocalMap,每一个Thread中都有一个该类型的变量——threadLocals——用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本。