首页 > 其他 > 详细

使用ThreadLocal注意事项

时间:2020-04-01 00:25:34      阅读:200      评论:0      收藏:0      [点我收藏+]

1,内存泄漏或产生脏数据

  (1)使用ThreadLocal时,会在线程的私有的Map对象中存储对应的变量值Value,对应的key为ThreadLocal对象本身。当线程为普通线程执行完逻辑就销毁时,

Map对象会被回收,当线程为线程池线程时,执行完任务后,线程并没有销毁所以Map对象任然存在,且里面的内容Value没有被删除。执行的次数多了后,就会产生内存泄漏。

  (2)当线程再次使用之前的ThreadLocal对象获取值时能获取到对应的Value,但这个值是上一次设置进去的,本次并没有设置Value值。所以也会产生脏数据。

2,inheritableThreadLocals 是主线程创建子线程时,会同步拷贝一个到子线程对应的inheritableThreadLocals对象里面。子线程可以拿到父线程在里面设置的值。

3,线程对象由两个Map对象,threadLocals,和inheritableThreadLocals  当ThreadLocal对象为ThreadLocal时set和get的对象是threadLocals(Map),当ThreadLocal对象

是InheritableThreadLocal时,set和get的对象是inheritableThreadLocals  。

使用ThreadLocal注意事项

原文:https://www.cnblogs.com/huacheng/p/12609435.html

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