ThreadLocal使用場景及其優勢

2021-08-20 14:14:37 字數 548 閱讀 5661

曾經很疑惑threadlocal是幹什麼用?什麼場景下要用?

查了幾篇文章,都說它的優勢是執行緒安全,想必他的作用就是為了執行緒安全吧。

仔細理解後發現,原來我們常用的區域性變數和靜態變數,在某種情況下無法滿足要求,比如,我要求快取乙個變數,這個時候你肯定會說搞乙個靜態map存一下就ok了,但是有幾個問題:

第一:其他執行緒擅自修改我的這個靜態map怎麼辦?

第二:靜態map之間併發訪問怎麼辦?

當然,也有人說而已使用區域性變數,然後通過傳遞引用來實現在不同的場合使用,但是這樣就要依賴具體方法的入參和出參,至少你要增加乙個入參來傳入這個引用吧?

這種情況下,threadlocal就可以發揮他的威力了,它的本質就是乙個內部的靜態map,key是當前執行緒的乙個控制代碼,value是需要儲存的值,當然value可以是任何型別的,至少是乙個map或者容器把,不然乙個執行緒就只能存乙個value了,太不實用。

基於上面這種設計,每個執行緒其實根本無法獲取到其他執行緒的key,由於是內部靜態map,不提供遍歷和查詢的介面,也確保了其他執行緒只能根據key獲取,所以,每個執行緒只能取到自己執行緒的value。

ThreadLocal的使用場景

在使用jdbc的時候,可以保證dao層與service層使用同乙個資料庫連線,從而保證資料庫 service層 事務的可行性。1.業務類和dao使用的執行緒是同乙個。a 可以分別列印兩個類中的當前執行緒。看他們的hashcode是否是同乙個。b 如何獲取當前執行緒。thread.currentthr...

ThreadLocal 用途與使用場景

threadlocal,即執行緒變數,是乙個以 threadlocal 物件為鍵 任意物件為值的儲存結構。概括起來說,對於多執行緒資源共享的問題,同步機制採用了 以時間換空間 的方式,而 threadlocal 採用了 以空間換時間 的方式。前者僅提供乙份變數,讓不同的執行緒排隊訪問 後者為每乙個執...

ThreadLocal 應用場景

1.threadlocal 是乙個儲存物件,它可分為static全域性變數,區域性變數,下面介紹的是全域性變數。當乙個多執行緒讀寫時就會出現併發的現象,也就當物件共享時會出現的場景。在網上檢視了一下別的的介紹。public class threadlocaltest public static st...