ThreadLocal執行緒區域性變數 多執行緒與高併發

2021-10-24 21:38:26 字數 1002 閱讀 5970

threadlocal執行緒區域性變數,實現了將物件變數儲存在特定的執行緒物件中,僅對當前執行緒可見。

我們在測試程式中,乙個執行緒往threadlocal物件中放置物件,然後另乙個物件來取物件取不到。

public class testthreadlocal  catch (interruptedexception e) 

system.out.println(tl.get());

}).start();

new thread(()-> catch (interruptedexception e)

tl.set(new person());

}).start(); }

static class person

}

檢視threadlocal源**,可以看到,get()和set()方法都涉及到乙個threadlocalmap物件,而該物件是在thread物件中的。

由以上**,可以看到,threadlocal實現的將物件變數儲存在特定的執行緒物件的map中,只對當前執行緒可見。

應用:資料庫連線

如果多個連線資料庫的方法組合為乙個事務,則其對應的是統一資料庫的多個連線,則其不能保證事物的原子性。而threadlocal可以保證當前執行緒值對應這乙個資料庫連線。

而且由於資料庫連線物件可以使用threadlocal存放,省去了不斷釋放和新建連線的系統消耗。

記憶體洩漏:

31 執行緒區域性變數 ThreadLocal

執行緒區域性變數 threadlocal 原理,作用 每個thread維護乙個threadlocalmap 對映表,使用threadlocal物件為弱引用的map集合 即弱引用的物件可以在gc中被 掉 value為對應的值。其生命週期和執行緒一致。用法 initialvalue 當get 方法為nu...

執行緒區域性變數ThreadLocal實現原理

之前做專案用到過threadlocal,但是沒有看原始碼層面的具體實現,今天特來補一補課。threadlocal,即執行緒區域性變數,用來為每乙個使用它的執行緒維護乙個獨立的變數副本。那種以時間換取空間的做法不同,threadlocal沒有任何鎖機制,它以空間換取時間的方式保證變數的執行緒安全。1 ...

執行緒ThreadLocal類

threadlocal 在很多地方叫做本地變數,在有些地方叫做執行緒本地儲存。threadlocal 在每個執行緒中為每個變數都建立了乙個副本,每個執行緒可以訪問自己內部的副本變數,而不會對其它執行緒的副本變數造成影響。如果看不懂沒關係,下面會解釋各個函式的意思。public t get publi...