Threadlocal是 java 提供的线程本地存储机制,可以利用该机制将数据缓存在 某个线程内部,任意方法中获取缓存的数据;
Threadlocal 是通过 ThreadlocalMap来实现的,每个 Thread对象(注意:不是Threadlocal对象)中都存在一个 ThreadlocalMap,map的 key为Threadlocal对象,map的值为需要缓存的值;
如果在线程池中使用 Threadlocal会造成内存泄漏,因为当Threadlocal使用完后,应该把设置的 key,value,也就是 Entry进行回收,但线程池中的线程不会回收(线程池中核心线程不会消亡会一直存在),而线程对象是通过强引用指向 ThreadlocalMap的,ThreadlocalMap对象也是通过强引用指向 Entry的,Entry对象也就不会回收,从而出现内存泄漏;
解决的办