重点理清楚Thread ThreadLocalMap ThreadLocal的关系。
同时,ThreadLocalMap存在内存泄露问题。
1.key是弱引用,存放的ThreadLocal对象,当其设置为null时,gc可以回收它。
但是value是强引用。因此ThreadLocal的set方法会遍历Entry数组,所有key为null的,也会清除value。虽然这样设计能降低内存泄露的风险,但是依然存在泄露的可能。
a.使用了Thread,但是没有调用set方法。
b.使用了Thread,然后没有使用threadlocal,重新放回线程池中,直到线程再次被使用的这段时间,都是内存泄露的状态,不可达,却占用内存。
聊聊ThreadLocal
最新推荐文章于 2025-04-25 20:34:10 发布