您的位置 首页 百科问答

什么是ThreadLocal?

什么是ThreadLocal?

  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。API方法也相应进行了调整,新版本的API方法分别是voidset(Tvalue)、Tget()以及TinitialValue()。

  ThreadLocal为每一个线程维护变量的副落约采负宁弦管围本的思路:

  在ThreadL适块再两取题鲁张ocal类中定义了一个ThreadLocalMap,每一个Thread中都有一个该类型的变量——threadLocals——用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本。

上一篇 英语besides的用法
下一篇 尽信书则不如无书的意思
扫一扫,手机访问

扫一扫,手机浏览