返回介绍

java.lang 类 ThreadLocal<T>

发布于 2019-10-04 09:51:08 字数 3879 浏览 851 评论 0 收藏 0

java.lang.Object
  └java.lang.ThreadLocal<T>
直接已知子类:
InheritableThreadLocal

public class ThreadLocal<T>
extends Object
 

该类提供了线程局部变量。这些变量不同于它们的普通对应物,因为访问一个变量(通过其 getset 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。 ThreadLocal 实例通常是类中的私有静态字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。

例如,在下面的类中,私有静态 ThreadLocal 实例( serialNum )为调用该类的静态 SerialNum.get() 方法的每个线程维护了一个“序列号”,该方法将返回当前线程的序列号。(线程的序列号是在第一次调用 SerialNum.get() 时分配的,并在后续调用中不会更改。)

 public class SerialNum {
     // The next serial number to be assigned
     private static int nextSerialNum = 0;

     private static ThreadLocal serialNum = new ThreadLocal() {
         protected synchronized Object initialValue() {
             return new Integer(nextSerialNum++);
         }
     };

     public static int get() {
         return ((Integer) (serialNum.get())).intValue();
     }
 }

每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。

从以下版本开始:
1.2

构造方法摘要
ThreadLocal()

创建一个线程本地变量。

方法摘要
Tget()

返回此线程局部变量的当前线程副本中的值。

protected TinitialValue()

返回此线程局部变量的当前线程的初始值。

voidremove()

移除此线程局部变量的值。

voidset(Tvalue)

将此线程局部变量的当前线程副本中的值设置为指定值。

从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

构造方法详细信息

ThreadLocal

public ThreadLocal()
创建一个线程本地变量。

方法详细信息

initialValue

protected T initialValue()
返回此线程局部变量的当前线程的初始值。最多在每次访问线程来获得每个线程局部变量时调用此方法一次,即线程第一次使用 get() 方法访问变量的时候。如果线程先于 get 方法调用 set(T) 方法,则不会在线程中再调用 initialValue 方法。

该实现只返回 null ;如果程序员希望将线程局部变量初始化为 null 以外的某个值,则必须为 ThreadLocal 创建子类,并重写此方法。通常,将使用匿名内部类。 initialValue 的典型实现将调用一个适当的构造方法,并返回新构造的对象。

返回:
返回此线程局部变量的初始值

get

public T get()
返回此线程局部变量的当前线程副本中的值。如果这是线程第一次调用该方法,则创建并初始化此副本。
返回:
此线程局部变量的当前线程的值

set

public void set(Tvalue)
将此线程局部变量的当前线程副本中的值设置为指定值。许多应用程序不需要这项功能,它们只依赖于 initialValue() 方法来设置线程局部变量的值。
参数:
value - 存储在此线程局部变量的当前线程副本中的值。

remove

public void remove()
移除此线程局部变量的值。这可能有助于减少线程局部变量的存储需求。如果再次访问此线程局部变量,那么在默认情况下它将拥有其 initialValue
从以下版本开始:
1.5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文