ThreadLocal底層實現原理

2021-09-13 13:20:47 字數 913 閱讀 2274

解釋的不錯的一片文章:

下邊是個人理解,如果有錯誤還請批評指正:

首先說一下使用方式:

threadlocalthreadlocala= new threadlocal();

threadlocalthreadlocalb = new threadlocal();

//存入

執行緒1: threadlocala.set("aaa");

threadlocalb.set("bbb");

執行緒2: threadlocala.set("111");

threadlocalb.set("222");

//提出

執行緒1: threadlocala.get() --> "aaa"

threadlocalb.get() --> "bbb"

執行緒2: threadlocala.get() --> "111"

threadlocalb.get() --> "222"

其實它的主要含義是:我們可以把threadlocal看做是每乙個thread的成員變數,所以乙個thread中可以有好多個threadlocal(開位址法實現的),而且這個threadlocal的型別是threadlocal.threadlocalmap,每乙個執行緒都會有乙個這樣的map,因為map中存放的是k-v鍵值對,(k是threadlocal物件,v是具體的value值),所以每個執行緒的資料之間都是隔離的,所以是執行緒安全的。

建議可以看看原始碼,原始碼還是不難看懂的,比如它的set時的過程:它是先獲取到當前執行緒,並新建乙個當前執行緒的threadlocal物件,然後把這個threadlocal物件當做k,儲存到map中。

threadlocal是乙個用空間來換取時間的做法,如果在空間上沒有限制,又需要考慮執行緒安全的問題的話,可以考慮使用threadlocal。

ThreadLocal的底層實現

定義乙個threadlocal物件local,執行緒t1和t2均會使用local.set放置資源,t1,t2在通過get獲取時又只會拿到自己set進去的資源,這種執行緒隔離是怎麼做到的?明明只有乙個threadlocal物件為多個執行緒服務,但卻保持了執行緒間的隔離 threadlocal並不是個容...

ThreadLocal實現原理

threadlocal,即執行緒區域性變數,其實就是乙個容器,每個執行緒都可通過其set方法儲存乙份資料,並且在get時只會獲取自己執行緒的資料,是常用的實現執行緒安全的方式。自己用過許多次了,但沒有細究其原理,今天大概看了一下原始碼,算是明白了一點點0.0 直接看threadlocal的get方法...

Threadlocal實現執行緒封閉

threadlocal可以為全域性狀態變數,在當前執行執行緒建立乙個副本,這個副本只允許當前執行緒訪問,其他執行緒無法訪問,實現執行緒封閉。通過介面方法set在當前執行執行緒的副本上設定值,通過get獲取設定的值,第一次呼叫get時候會執行乙個初始化方法initialvalue初始化副本值。pack...