ThreadLocal的原理是將數據保存在線程的ThreadLocalMap中,ThreadLocalMap是ThreadLocal類的一個內部類,用于保存線程的局部變量。每個線程都擁有一個自己的ThreadLocalMap對象,通過ThreadLocal對象可以獲取到當前線程的ThreadLocalMap。
當使用ThreadLocal對象的set方法設置值時,實際上是將值存儲在當前線程的ThreadLocalMap中,以ThreadLocal對象作為key,值作為value。當使用ThreadLocal對象的get方法獲取值時,實際上是從當前線程的ThreadLocalMap中根據ThreadLocal對象作為key來獲取對應的值。
由于線程之間互相獨立,所以每個線程的ThreadLocalMap是相互隔離的,互不干擾。每個線程只能獲取到自己存儲在ThreadLocalMap中的值,無法訪問其他線程的值。這樣就保證了線程之間的數據安全性。
另外,為了避免內存泄漏,ThreadLocal中使用了弱引用來引用ThreadLocal對象,當ThreadLocal對象沒有被外部強引用時,垃圾回收器會將其回收,同時也會將對應的值從ThreadLocalMap中移除,防止內存泄漏。