public class ThreadLocal
extends Object
java.lang.Object | |
↳ | java.lang.ThreadLocal<T> |
Known Direct Subclasses |
这个类提供线程局部变量。 这些变量与它们的正常副本不同,因为访问一个线程的每个线程(通过它的方法get或set )都有其自己的独立初始化变量副本。 ThreadLocal实例通常是希望将状态与线程关联的类(例如,用户ID或事务ID)中的私有静态字段。
例如,下面的类为每个线程生成本地唯一的标识符。 线程的ID在第一次调用ThreadId.get()时被分配,并在随后的调用中保持不变。
import java.util.concurrent.atomic.AtomicInteger; public class ThreadId { // Atomic integer containing the next thread ID to be assigned private static final AtomicInteger nextId = new AtomicInteger(0); // Thread local variable containing each thread's ID private static final ThreadLocal<Integer> threadId = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return nextId.getAndIncrement(); } }; // Returns the current thread's unique ID, assigning it if necessary public static int get() { return threadId.get(); } }
只要线程处于活动状态并且可以访问ThreadLocal实例,每个线程就会保持对其线程局部变量副本的隐式引用; 在线程消失后,线程本地实例的所有副本都将进行垃圾回收(除非存在对这些副本的其他引用)。
Public constructors |
|
---|---|
ThreadLocal() 创建一个线程局部变量。 |
Public methods |
|
---|---|
T |
get() 返回此线程局部变量的当前线程副本中的值。 |
void |
remove() 删除此线程局部变量的当前线程值。 |
void |
set(T value) 将此线程局部变量的当前线程的副本设置为指定的值。 |
Protected methods |
|
---|---|
T |
initialValue() 返回此线程局部变量的当前线程的“初始值”。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
T get ()
返回此线程局部变量的当前线程副本中的值。 如果该变量对当前线程没有值,则首先将其初始化为调用initialValue()
方法返回的值。
Returns | |
---|---|
T |
the current thread's value of this thread-local |
void remove ()
删除此线程局部变量的当前线程值。 如果此线程局部变量随后是当前线程read ,则通过调用其initialValue()
方法将其值重新初始化,除非其值为当前线程在过渡时期的set 。 这可能会导致在当前线程中多次调用initialValue方法。
void set (T value)
将此线程局部变量的当前线程的副本设置为指定的值。 大多数子类都不需要重写此方法,仅依靠initialValue()
方法来设置线程本地值。
Parameters | |
---|---|
value |
T : the value to be stored in the current thread's copy of this thread-local. |
T initialValue ()
返回此线程局部变量的当前线程的“初始值”。 该方法将被调用的第一次一个线程访问与可变get()
方法,除非线程先前调用的set(T)
方法,在这种情况下initialValue方法将不被调用的线程。 通常,每个线程最多调用一次此方法,但在后续调用remove()
后跟随get()
,可能会再次调用此方法。
该实现仅返回null ; 如果程序员希望线程局部变量具有除null以外的初始值, 则必须将ThreadLocal分类,并重写此方法。 通常,将使用匿名内部类。
Returns | |
---|---|
T |
the initial value for this thread-local |