常见用途
- 每个线程需要一个对象。工具类。
- 每个线程需要保存全局变量。让不同方法使用避免参数的传递
原理
每个线程都有一个 ThreadLocal.ThreadLocalMap threadLocals = null
重要方法
- initalValue
- 该方法会返回当前线程的初始值,这是一个懒加载当调用get方法的时候才会触发
- 如果线程已经调用过了set方法,不会调用initalValue
- 通常每个线程只执行一次,除非调用了remove方法
- 如果不重写方法,默认返回null
- set
- get
内存泄漏
ThreadLocalMap的key是弱引用有可能被回收,而value是无法被回收的。但是在ThreadLocal的的方法中已经对key为null的entry扫描并且把value也等于null.
所以在不使用后,尽量调用remove方法。
注意点
空指针异常?
在set之前先get,只会返回null。有可能是泛型的自动拆装箱引起的