|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.lang.ThreadLocal<T>
public class ThreadLocal<T>
該類別提供了執行緒局部 (thread-local) 變數。這些變數不同於它們的普通對應物,因為存取某個變數(通過其 get 或 set 方法)的每個執行緒都有自己的區域變數,它獨立於變數的初始化副本。ThreadLocal 實例通常是類別中的 private static 欄位,它們希望將狀態與某一個執行緒(例如,使用者 ID 或事務 ID)相關聯。
例如,以下類別產生對每個執行緒唯一的區域標識符。 執行緒 ID 是在第一次調用 UniqueThreadIdGenerator.getCurrentThreadId() 時分派的,在後續調用中不會更改。
import java.util.concurrent.atomic.AtomicInteger; public class UniqueThreadIdGenerator { private static final AtomicInteger uniqueId = new AtomicInteger(0); private static final ThreadLocal < Integer > uniqueNum = new ThreadLocal < Integer > () { @Override protected Integer initialValue() { return uniqueId.getAndIncrement(); } }; public static int getCurrentThreadId() { return uniqueId.get(); } } // UniqueThreadIdGenerator
每個執行緒都保持對其執行緒區域變數副本的隱式參考,只要執行緒是活動的並且 ThreadLocal 實例是可存取的;在執行緒消失之後,其執行緒局部實例的所有副本都會被垃圾回收(除非存在對這些副本的其他參考)。
建構子摘要 | |
---|---|
ThreadLocal()
創建一個執行緒本地變數。 |
方法摘要 | |
---|---|
T |
get()
返回此執行緒區域變數的當前執行緒副本中的值。 |
protected T |
initialValue()
返回此執行緒區域變數的當前執行緒的「初始值」。 |
void |
remove()
移除此執行緒區域變數當前執行緒的值。 |
void |
set(T value)
將此執行緒區域變數的當前執行緒副本中的值設置為指定值。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
public ThreadLocal()
方法詳細資訊 |
---|
protected T initialValue()
get()
方法存取變數時將調用此方法,但如果執行緒之前調用了 set(T)
方法,則不會對該執行緒再調用 initialValue 方法。通常,此方法對每個執行緒最多調用一次,但如果在調用 get()
後又調用了 remove()
,則可能再次調用此方法。
該實作返回 null;如果開發人員希望執行緒區域變數具有 null 以外的值,則必須為 ThreadLocal 創建子類別,並覆寫此方法。通常將使用匿名內部類別完成此操作。
public T get()
initialValue()
方法返回的值。
public void set(T value)
initialValue()
方法來設置執行緒區域變數的值。
value
- 存儲在此執行緒區域變數的當前執行緒副本中的值。public void remove()
initialValue()
方法重新初始化其值。這將導致在當前執行緒多次調用 initialValue 方法。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。