該類提供了線程局部 (thread-local) 變量。這些變量不同于它們的普通對應(yīng)物,因為訪問某個變量(通過其 get 或 set 方法)的每個線程都有自己的局部變量,它獨(dú)立于變量的初始化副本。ThreadLocal 實例通常是類中的 private static 字段,它們希望將狀態(tài)與某一個線程(例如,用戶 ID 或事務(wù) ID)相關(guān)聯(lián)。
這個是什么,就是解決一個線程內(nèi)共享一個變量,這個變量只在這個線程內(nèi)部有效,在一個線程內(nèi)訪問的都一個同一個對象,而多個線程之間的這個對象卻是相互獨(dú)立的。說來就是每一個線程都有一個獨(dú)立的此線程副本。
使用ThreadLocal一般都聲明為靜態(tài)的變量
在我們的線程中有一個threadLocals的Hash表來存放這個對象,我們用ThreadLocal對象作為主鍵,因此我們的ThreadLocal對象聲明為靜態(tài)的
我們可以使用多個TheadLocal,來使一個線程里有多個共享的變量
這個就是要實現(xiàn)一個線程里面共享一個變量
public void set(Object value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); }
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}