学习笔记(08):Java并发编程精讲-ThreadLocal的实现原理

立即学习:https://edu.csdn.net/course/play/26270/326866?utm_source=blogtoedu

一、JAVA 的四种引用:

学习笔记(08):Java并发编程精讲-ThreadLocal的实现原理

 

二、ThreadLocal 数据结构

学习笔记(08):Java并发编程精讲-ThreadLocal的实现原理

 

三、ThreadLocal 实现原理

学习笔记(08):Java并发编程精讲-ThreadLocal的实现原理

 key 是弱引用,被置空后会被回收,那么 Thread -> ThreadLocalMap -> Entry -> Value 这个是强引用链路,ThreadLocalMap 无法再通过 key 来访问 Value,Value 在这里不会被回收,当这样对象过多的占用内存时,就会发生 OOM 异常。

 

为了解决这个问题:

1. 在使用 ThreadLocal 时,都要在线程全部执行完之后再finally代码块中调用 remove() 方法,清除内存(线程池中使用要尤为注意)

2. 保存在 ThreadLocal 的数据不要太大