ThreadLocal 是用于缓存单个线程的共享变量,线程之间不能互相访问,可以很好的防止多线程中调用静态变量出现不可挽回的惨案
方法调用
get()
获取ThreadLocal中当前线程共享变量的值
set()
设置ThreadLocal中当前线程共享变量的值
remove()
移除ThreadLocal中当前线程共享变量的值
initialValue()
ThreadLocal没有被当前线程赋值时或当前线程刚调用remove方法后调用get方法时,此方法初始化当前线程后 返回初始化值 一般用来在使用时重写此方法
实例参考:应用实例
弱引用问题
关于ThreadLocalMap<ThreadLocal, Object>弱引用问题
问题分析
当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocalMap<null, Object>的键值对,造成内存泄露。(ThreadLocal被回收,ThreadLocal关联的线程共享变量还存在)。
虽然ThreadLocal的get,set方法可以清除ThreadLocalMap中key为null的value,但是get,set方法在内存泄露后并不会必然调用
解决方法
1、使用完线程共享变量后,显示调用ThreadLocalMap.remove方法清除线程共享变量;
2、JDK建议ThreadLocal定义为private static,这样ThreadLocal的弱引用问题则不存在了。
本文参考 coshaho
版权声明:本文为原创文章,版权归本站所有,欢迎分享本文,转载请保留出处!