首页 > 其他 > 详细

threadLocalMap回顾

时间:2020-03-25 16:07:42      阅读:47      评论:0      收藏:0      [点我收藏+]

threadLocal和threadLocalMap

用途:放入到threadlocalMap对象中,同一个线程thread在任何地方都可以拿出来

理解:

每个线程thead对象具有一个threadLocalMap对象,可以具有多个threadLocal对象

threadLocalMap类是threadLocal类的静态内部类,属于threadLocal类,而不是属于threadLocal对象

在threadLocal类中的方法创建threadLoalMap对象

threadLocalMap对象的元素entry的key是threadLocal对象,value是需要存储的数据,可以具有多个threadLocal对象

entry的key是一个弱引用的ThreadLocal对象(弱引用对象存活到下一次垃圾回收发生前),所以垃圾回收之前会清除entry对象的key,则会出现key为null的entry,但value所占内存不会释放,则可能会出现内存泄露(无法释放已申请的内存空间),最终导致内存溢出(没有内存可以分配给新的对象)。在ThreadLocal类的get()、set()、remove()方法,均有实现回收 key 为 null 的 Entry 的 value所占的内存。所以为了防止内存泄露,当线程任务不会再用ThreadLocal对象的末尾,调用一次上述三个方法的其中一个即可。个人理解其实线程死亡时会回收所有内存。

//注意,在web中,由于tomcat线程重用,如果用户信息存在threadLocalMap对象中,则一个请求结束后必须要清空

附:

强引用: 不会被回收的内存。

软引用: 内部不足的时候回收的内存。

弱引用: 存活到垃圾回收前的内存。

threadLocalMap回顾

原文:https://www.cnblogs.com/csuliujia/p/12566344.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!