使用ThreadLocal注意事项


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  。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM