public class ThreadLocal<T> extends Object
get
或
set
法)有自己独立的变量,初始化复制。
ThreadLocal
实例通常是私有的静态字段在类希望关联状态的线程(例如,一个用户ID或交易ID)。
例如,下面的类为每个线程生成唯一的标识符。一个线程的ID分配第一次调用ThreadId.get()
仍然在后续调用不变。
进口java.util.concurrent.atomic.atomicinteger;公共课就{包含要分配的下一个线程的原子数私有静态最终AtomicInteger nextId =新的AtomicInteger(0);包含每个线程的标识的线程局部变量私有静态ThreadLocal <整数> 就=新的ThreadLocal <整数> (){@Override保护整initialvalue() {nextid getandincrement()返回;}};返回当前线程唯一的标识号,如果需要的话,指定它public static int get() {就get()返回;}} 整数> 整数>
每一个线程拥有它的线程局部变量拷贝暗示只要线是活着的ThreadLocal
实例访问;螺纹消失后,所有的线程本地实例副本受垃圾收集(除非其他引用这些副本存在)。
Constructor and Description |
---|
ThreadLocal()
创建一个线程局部变量。
|
Modifier and Type | Method and Description |
---|---|
T |
get()
返回当前线程本地变量的当前线程的副本中的值。
|
protected T |
initialValue()
返回此线程局部变量的当前线程的“初始值”。
|
void |
remove()
移除此线程局部变量的当前线程的值。
|
void |
set(T value)
将此线程局部变量的当前线程的副本设置为指定的值。
|
static <S> ThreadLocal<S> |
withInitial(Supplier<? extends S> supplier)
创建一个线程局部变量。
|
protected T initialValue()
get()
方法,除非线程之前调用的
set(T)
方法,在这种情况下,
initialValue
方法不会被调用的线程。通常情况下,这种方法是每个线程调用一次,但它可能在后续调用
remove()
随后
get()
案再次调用。
这种实现简单的返回null
;如果程序员渴望线程局部变量有一个初步的价值比其他null
,ThreadLocal
必须子类,并重写方法。通常情况下,一个匿名的内部类将被使用。
public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier)
Supplier
的
get
法测定。
S
-线程本地的值的类型
supplier
-供应商来确定初始值
NullPointerException
-如果指定供应商是空的
public T get()
initialValue()
方法调用返回。
public void set(T value)
initialValue()
法建立本地线程的值。
value
-被存储在该线程本地当前线程的值复制。
public void remove()
initialValue()
方法,除非它的价值
set在中期当前线程。这可能会导致当前线程的
initialValue
方法的多个调用。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.