ThreadLocal的原理是将数据保存在线程的ThreadLocalMap中,ThreadLocalMap是ThreadLocal类的一个内部类,用于保存线程的局部变量。每个线程都拥有一个自己的ThreadLocalMap对象,通过ThreadLocal对象可以获取到当前线程的ThreadLocalMap。
当使用ThreadLocal对象的set方法设置值时,实际上是将值存储在当前线程的ThreadLocalMap中,以ThreadLocal对象作为key,值作为value。当使用ThreadLocal对象的get方法获取值时,实际上是从当前线程的ThreadLocalMap中根据ThreadLocal对象作为key来获取对应的值。
由于线程之间互相独立,所以每个线程的ThreadLocalMap是相互隔离的,互不干扰。每个线程只能获取到自己存储在ThreadLocalMap中的值,无法访问其他线程的值。这样就保证了线程之间的数据安全性。
另外,为了避免内存泄漏,ThreadLocal中使用了弱引用来引用ThreadLocal对象,当ThreadLocal对象没有被外部强引用时,垃圾回收器会将其回收,同时也会将对应的值从ThreadLocalMap中移除,防止内存泄漏。