ThreadLocal實現原理簡述

2021-09-25 15:06:54 字數 958 閱讀 5644

threadlocal是乙個執行緒內共享變數工具類。 將執行緒與該執行緒存放的物件做乙個對映,各個執行緒之間的變數互不干擾。適用於各個執行緒依賴不同的變數值完成操作的場景,如:spring宣告式資料庫事務、shiro的session

threadlocal內部結構

核心機制:

1.每個執行緒例項中有個threadlocals屬性,實際上是個map

2.這個map中存放的是threadlocal例項和threadlocal例項在該執行緒中共享的值(value)

3.執行緒中的map有threadlocal例項維護,由threadlocal例項向map中設定和獲取值。

3.1 設定值

threadlocal例項通過thread.currentthread獲得當前執行緒例項,自身為key,待設定的值為value組成entry,放入當前執行緒例項的map中。

3.2 獲取值

threadlocal例項通過thread.currentthread獲得當前執行緒例項,在map中以自身為key,獲得對應的value。

從上面的機制中確保threadlocal設定的值,僅在設定時的執行緒中共享,其它執行緒無法訪問到該執行緒中設定的值。確保了,1、執行緒間變數隔離,2、執行緒內能訪問。

當執行緒例項的生命周期短於threadlocal例項的生命週期,threadlocal記憶體的**,取決於threadlocal例項的生命週期。而,當執行緒例項的生命週期長於threadlocal例項的生命週期(一般執行緒池場景)時,thread中threadlocalmap的每個entry的key(對threadlocal的弱引用),在gc時會被**;然而,entry中value(強引用)是不會**。當我們使用threadlocal的set方法,要配套進行remove,確保value能及時**。

threadlocal-面試必問深度解析

ThreadLocal實現原理

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

ThreadLocal底層實現原理

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

ThreadLocal的作用和實現原理

threadlocal是乙個執行緒內部的資料儲存類,通過它可以在指定的執行緒中儲存資料,資料儲存以後,只有在指定的執行緒中可以獲取到儲存的資料,對於其他執行緒來說則無法取到資料。threadlocal的主要作用 輕鬆實現一些看起來很複雜的功能,適合以下一些應用場景。某些資料是以執行緒為作用域並且不同...