多執行緒(二)ThreadLocal
阿新 • • 發佈:2020-08-16
ThreadLocal提供了執行緒的區域性變數,每個執行緒都可以通過set()
和get()
來對這個區域性變數進行操作,但不會和其他執行緒的區域性變數進行衝突,實現了執行緒的資料隔離~。
簡要言之:往ThreadLocal中填充的變數屬於當前執行緒,該變數對其他執行緒而言是隔離的。
管理connection
資料庫連線池的連線交由ThreadLocal來進行管理。ThreadLocal能夠實現當前執行緒的操作都是用同一個Connection,保證了事務!
ThreadLocal原理總結
-
-
ThreadLocalMap是ThreadLocal的內部類,用Entry來進行儲存
-
呼叫ThreadLocal的set()方法時,實際上就是往ThreadLocalMap設定值,key是ThreadLocal物件,值是傳遞進來的物件
-
呼叫ThreadLocal的get()方法時,實際上就是往ThreadLocalMap獲取值,key是ThreadLocal物件
-
ThreadLocal本身並不儲存值,它只是作為一個key來讓執行緒從ThreadLocalMap獲取value。
正因為這個原理,所以ThreadLocal能夠實現“資料隔離”,獲取當前執行緒的區域性變數值,不受其他執行緒影響~
ThreadLocal設計的目的就是為了能夠在當前執行緒中有屬於自己的變數,並不是為了解決併發或者共享變數的問題