JavaTM 2 Platform
Standard Ed. 6

java.lang
類別 ThreadLocal<T>

java.lang.Object
  繼承者 java.lang.ThreadLocal<T>
直接已知子類別:
InheritableThreadLocal

public class ThreadLocal<T>
extends Object

該類別提供了執行緒局部 (thread-local) 變數。這些變數不同於它們的普通對應物,因為存取某個變數(通過其 getset 方法)的每個執行緒都有自己的區域變數,它獨立於變數的初始化副本。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 實例是可存取的;在執行緒消失之後,其執行緒局部實例的所有副本都會被垃圾回收(除非存在對這些副本的其他參考)。

從以下版本開始:
1.2

建構子摘要
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
 

建構子詳細資訊

ThreadLocal

public ThreadLocal()
創建一個執行緒本地變數。

方法詳細資訊

initialValue

protected T initialValue()
返回此執行緒區域變數的當前執行緒的「初始值」。執行緒第一次使用 get() 方法存取變數時將調用此方法,但如果執行緒之前調用了 set(T) 方法,則不會對該執行緒再調用 initialValue 方法。通常,此方法對每個執行緒最多調用一次,但如果在調用 get() 後又調用了 remove(),則可能再次調用此方法。

該實作返回 null;如果開發人員希望執行緒區域變數具有 null 以外的值,則必須為 ThreadLocal 創建子類別,並覆寫此方法。通常將使用匿名內部類別完成此操作。

返回:
返回此執行緒區域變數的初始值

get

public T get()
返回此執行緒區域變數的當前執行緒副本中的值。如果變數沒有用於當前執行緒的值,則先將其初始化為調用 initialValue() 方法返回的值。

返回:
此執行緒區域變數的當前執行緒的值

set

public void set(T value)
將此執行緒區域變數的當前執行緒副本中的值設置為指定值。大部分子類別不需要覆寫此方法,它們只依靠 initialValue() 方法來設置執行緒區域變數的值。

參數:
value - 存儲在此執行緒區域變數的當前執行緒副本中的值。

remove

public void remove()
移除此執行緒區域變數當前執行緒的值。如果此執行緒區域變數隨後被當前執行緒讀取,且這期間當前執行緒沒有設置其值,則將調用其 initialValue() 方法重新初始化其值。這將導致在當前執行緒多次調用 initialValue 方法。

從以下版本開始:
1.5

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only