什么是ThreadLocal

ThreadLocal正如其名,是一个线程本地变量,每个线程独自持有,保证了该变量的线程安全性,还可以在线程上下文中传递。

ThreadLocal如何实现

每个线程中存在一个ThreadLocalMap对象,key是ThreadLocal对象本身,value是ThreadLocal对象set的值。
Map->key是一个弱引用,每次垃圾回收的时候都会去尝试回收key。

ThreadLocal与内存泄漏

这里其实就引发出一个问题,我们平时通常是使用线程池来管理线程的。当线程池中的线程的ThreadLocal对象被set了值并使用以后,key在强引用结束后就会随着gc被回收,然而value却仍然在map中存在直接引用,导致无法回收,这时候就引发了内存泄漏。所以我们必须在使用完对应的对象时,调用threadlocal.remove()方法防止内存泄漏。(当然threadlocal本身也有一些优化,在调用它的get,set方法时会把无直接引用的value释放掉,但是假如一直不调用get,set方法,还是会内存泄漏)

相关文章:

  • 2021-08-02
  • 2022-02-20
  • 2021-07-13
  • 2021-08-04
  • 2021-07-11
  • 2021-09-29
  • 2021-10-18
猜你喜欢
  • 2021-10-10
  • 2021-04-10
  • 2021-07-18
  • 2022-12-23
  • 2021-10-06
  • 2021-05-15
相关资源
相似解决方案