ThreadLocal的底層實現

2021-09-29 15:20:25 字數 1392 閱讀 5695

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

threadlocal並不是個容器,它本身不會儲存任何資源,如果它是乙個容器,任何乙個執行緒均能訪問容器內的所有資源,無法做到執行緒隔離。

threadlocal中有個內部類threadlocalmap,key為threadlocal物件,value為資源內容。

threadlocalmap的例項儲存在thread中,這是執行緒隔離的關鍵,即每個thread都會持有獨屬於自己的乙個threadlocalmap,執行緒通過threadlocal.set儲存的資源實際上儲存在這個threadlocalmap中。

在使用threadlocal.get時,其執行步驟如下:

threadlocal會獲取到當前的執行緒threadthread中拿到這個thread獨有的threadlocalmapthreadlocalmap取得自己這個threadlocal物件對應的entity返回這個entityvalue在使用threadlocal.set時,其執行步驟如下:

threadlocal會獲取到當前的執行緒threadthread中拿到這個thread獨有的threadlocalmapmap中新增key為自身threadlocal物件、value為資源的entity

從上面可以看到,threadlocal有兩個功能

多執行緒環境下,將共享變數變成多個執行緒獨有的副本,將共享變成不共享,解決併發問題

作為一種傳遞資料的手段,如果某個資源很多地方都會用到,而每次建立又很麻煩或者很佔資源,可以直接放到threadlocal中,其他地方直接從threadlocal中取得即可

ThreadLocal底層實現原理

解釋的不錯的一片文章 下邊是個人理解,如果有錯誤還請批評指正 首先說一下使用方式 threadlocalthreadlocala new threadlocal threadlocalthreadlocalb new threadlocal 存入 執行緒1 threadlocala.set aaa ...

ConcurrentHashMap底層實現

concurrenthashmap融合了hashtable和hashmap二者的優勢 hashtable是做了同步的,hashmap沒有同步,所以hashmap在單執行緒情況下效率高,hashtable在多執行緒情況下,同步操作能保證程式執行的正確性 但是hashtable每次同步執行都要鎖住整個結...

LinkedList相關知識及底層鍊錶實現原理

1 linkedlist集合實現了list介面,儲存元素特點是 有序且可重複,並且集合元素都有下標,從0開始以1遞增。2 linkedlist底層是以鍊錶為這種資料結構來儲存資料 3 linkedlist集合儲存元素優缺點 優點 由於底層是以鍊錶為資料結構,所以在增刪方面速度很快,也很方便 缺點 查...