定義乙個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
會獲取到當前的執行緒thread
從thread
中拿到這個thread
獨有的threadlocalmap
從threadlocalmap
取得自己這個threadlocal
物件對應的entity
返回這個entity
的value
在使用threadlocal.set
時,其執行步驟如下:
threadlocal
會獲取到當前的執行緒thread
從thread
中拿到這個thread
獨有的threadlocalmap
向map
中新增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集合儲存元素優缺點 優點 由於底層是以鍊錶為資料結構,所以在增刪方面速度很快,也很方便 缺點 查...