1. 程式人生 > >ThreadLocal如何保證獲取到想要執行緒變數

ThreadLocal如何保證獲取到想要執行緒變數

首先ThreadLocal並不會儲存資料,它做的只是做獲取和存放這些過程.資料本身並沒有存在ThreadLocal中.

那麼問題來了,資料到底存放在哪裡?

    存放在當前執行緒中即Thread中的ThreadLocalMap中.

那麼ThreadLocalMap又是什麼?

   ThreadLocal的內部類.....再見

好玩嗎....並不好玩....貼程式碼吧

這是ThreadLocal中的儲存資料的方法,程式碼解析:

1.第一部獲取當前執行緒;

2.通過當前執行緒獲取map,從此可以看出map是與當前執行緒相關的是吧,此處的map儲存線上程中

3.儲存資料,盡然叫做map,我們大概的估計下可能資料介面有些類似map,key不能相同(其實就是這樣的ThreadLocalMap資料結構就是一個Entry陣列),由此你看出了什麼.....即:

  •    一個ThreadLocal在一個執行緒中只能儲存一個變數值;
  •    如果你想獲得之前線上程儲存的變數,你得保證你的ThreadLocal是個單例;

4.字面意思是建立一個執行緒的map,事實就是這樣

那麼ThreadLocal 是執行緒安全的嗎?

一般意義上講ThreadLocal是執行緒安全的,因為你操作的只是你自己的執行緒變數....

在其他執行緒中可不可以獲取當前執行緒變數?

可以...你可以通過反射機制,加上執行緒物件...你操作操作...這下就不安全啦...