1. 程式人生 > 實用技巧 >多執行緒(二)ThreadLocal

多執行緒(二)ThreadLocal

ThreadLocal提供了執行緒的區域性變數,每個執行緒都可以通過set()get()來對這個區域性變數進行操作,但不會和其他執行緒的區域性變數進行衝突,實現了執行緒的資料隔離~。

簡要言之:往ThreadLocal中填充的變數屬於當前執行緒,該變數對其他執行緒而言是隔離的。

管理connection

資料庫連線池的連線交由ThreadLocal來進行管理。ThreadLocal能夠實現當前執行緒的操作都是用同一個Connection,保證了事務!

ThreadLocal原理總結

  1. 每個Thread維護著一個ThreadLocalMap的引用

  2. ThreadLocalMap是ThreadLocal的內部類,用Entry來進行儲存

  3. 呼叫ThreadLocal的set()方法時,實際上就是往ThreadLocalMap設定值,key是ThreadLocal物件,值是傳遞進來的物件

  4. 呼叫ThreadLocal的get()方法時,實際上就是往ThreadLocalMap獲取值,key是ThreadLocal物件

  5. ThreadLocal本身並不儲存值,它只是作為一個key來讓執行緒從ThreadLocalMap獲取value

正因為這個原理,所以ThreadLocal能夠實現“資料隔離”,獲取當前執行緒的區域性變數值,不受其他執行緒影響~

ThreadLocal設計的目的就是為了能夠在當前執行緒中有屬於自己的變數,並不是為了解決併發或者共享變數的問題