Most visited

Recently visited

Added in API level 1

ThreadLocal

public class ThreadLocal
extends Object

java.lang.Object
   ↳ java.lang.ThreadLocal<T>
Known Direct Subclasses


这个类提供线程局部变量。 这些变量与它们的正常副本不同,因为访问一个线程的每个线程(通过它的方法getset )都有其自己的独立初始化变量副本。 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实例,每个线程就会保持对其线程局部变量副本的隐式引用; 在线程消失后,线程本地实例的所有副本都将进行垃圾回收(除非存在对这些副本的其他引用)。

Summary

Public constructors

ThreadLocal()

创建一个线程局部变量。

Public methods

T get()

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

void remove()

删除此线程局部变量的当前线程值。

void set(T value)

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

Protected methods

T initialValue()

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

Inherited methods

From class java.lang.Object

Public constructors

ThreadLocal

Added in API level 1
ThreadLocal ()

创建一个线程局部变量。

Public methods

get

Added in API level 1
T get ()

返回此线程局部变量的当前线程副本中的值。 如果该变量对当前线程没有值,则首先将其初始化为调用initialValue()方法返回的值。

Returns
T the current thread's value of this thread-local

remove

Added in API level 1
void remove ()

删除此线程局部变量的当前线程值。 如果此线程局部变量随后是当前线程read ,则通过调用其initialValue()方法将其值重新初始化,除非其值为当前线程在过渡时期的set 这可能会导致在当前线程中多次调用initialValue方法。

set

Added in API level 1
void set (T value)

将此线程局部变量的当前线程的副本设置为指定的值。 大多数子类都不需要重写此方法,仅依靠initialValue()方法来设置线程本地值。

Parameters
value T: the value to be stored in the current thread's copy of this thread-local.

Protected methods

initialValue

Added in API level 1
T initialValue ()

返回此线程局部变量的当前线程的“初始值”。 该方法将被调用的第一次一个线程访问与可变get()方法,除非线程先前调用的set(T)方法,在这种情况下initialValue方法将不被调用的线程。 通常,每个线程最多调用一次此方法,但在后续调用remove()后跟随get() ,可能会再次调用此方法。

该实现仅返回null ; 如果程序员希望线程局部变量具有除null以外的初始值, 必须将ThreadLocal分类,并重写此方法。 通常,将使用匿名内部类。

Returns
T the initial value for this thread-local

Hooray!