W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
java.lang.Object
|---java.lang.ThreadLocal<T&
public class ThreadLocal<T>
extends Object
此類提供線程局部變量。 這些變量不同于它們的正常對應(yīng)變量,因為每個訪問一個(通過它的 get 或 set 方法)的線程都有它自己的、獨立初始化的變量副本。 ThreadLocal 實例通常是希望將狀態(tài)與線程相關(guān)聯(lián)的類中的私有靜態(tài)字段(例如,用戶 ID 或事務(wù) ID)。
例如,下面的類生成每個線程本地的唯一標識符。 線程的 id 在第一次調(diào)用 ThreadId.get() 時被分配,并且在后續(xù)調(diào)用中保持不變。
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();
}
}
只要線程處于活動狀態(tài)并且 ThreadLocal 實例可訪問,每個線程都持有對其線程局部變量副本的隱式引用; 在線程消失后,它的所有線程本地實例副本都將受到垃圾回收(除非存在對這些副本的其他引用)。
構(gòu)造函數(shù) | 描述 |
---|---|
ThreadLocal() | 創(chuàng)建一個線程局部變量。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
T | get() | 返回此線程局部變量的當前線程副本中的值。 |
protected T | initialValue() | 返回此線程局部變量的當前線程的“初始值”。 |
void | remove() | 刪除此線程局部變量的當前線程值。 |
void | set(T value) | 將此線程局部變量的當前線程副本設(shè)置為指定值。 |
static <S> ThreadLocal<S> | withInitial(Supplier<? extends S> supplier) | 創(chuàng)建一個線程局部變量。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
public ThreadLocal()
創(chuàng)建一個線程局部變量。
protected T initialValue()
返回此線程局部變量的當前線程的“初始值”。 該方法將在線程第一次使用 get() 方法訪問變量時調(diào)用,除非該線程先前調(diào)用了 set(T) 方法,在這種情況下,不會為該線程調(diào)用 initialValue 方法。 通常,每個線程最多調(diào)用一次此方法,但在隨后調(diào)用 remove() 和 get() 的情況下,它可能會再次調(diào)用。
此實現(xiàn)僅返回 null; 如果程序員希望線程局部變量具有除 null 以外的初始值,則必須將 ThreadLocal 子類化,并重寫此方法。 通常,將使用匿名內(nèi)部類。
返回:
此線程本地的初始值
public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier)
創(chuàng)建一個線程局部變量。 變量的初始值是通過調(diào)用 Supplier 的 get 方法來確定的。
類型參數(shù):
類型參數(shù)名稱 | 類型參數(shù)描述 |
---|---|
S | 線程本地值的類型 |
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
supplier | 用于確定初始值的供應(yīng)商 |
返回:
一個新的線程局部變量
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果指定的供應(yīng)商為null |
public T get()
返回此線程局部變量的當前線程副本中的值。 如果變量沒有當前線程的值,則首先將其初始化為調(diào)用 initialValue() 方法返回的值。
返回:
此線程本地的當前線程的值
public void set(T value)
將此線程局部變量的當前線程副本設(shè)置為指定值。 大多數(shù)子類不需要重寫此方法,僅依賴于 initialValue() 方法來設(shè)置線程局部變量的值。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
value | 要存儲在此線程本地的當前線程副本中的值。 |
public void remove()
刪除此線程局部變量的當前線程值。 如果這個線程局部變量隨后被當前線程讀取,它的值將通過調(diào)用它的 initialValue() 方法重新初始化,除非它的值是由當前線程在中間設(shè)置的。 這可能會導(dǎo)致在當前線程中多次調(diào)用 initialValue 方法。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: