首页 > 其他 > 详细

ThreadLocal

时间:2019-01-25 23:11:55      阅读:212      评论:0      收藏:0      [点我收藏+]

ThreadLocal线程局部变量,当多线程需要多次使用同一个对象,并且需要该对象具有相同初始化值的时候最适合使用ThreadLocal。

ThreadLocal在每个线程中对该对象会创建一个副本,即每个线程内部都会有一个该对象,且在线程内部任何地方都可以使用,线程之间互不影响,不存在线程安全问题。但是由于在每个线程中都创建了对象副本,对资源的消耗比较大,比如内存的占用会比不使用ThreadLocal要大。

每个线程对象内部都维护了一个ThreadLocalMap这样一个ThreadLocal的Map,可以存放若干个ThreadLocal。ThreadLocal中重要的方法有get()和set()方法,当调用get()方法的时候,先获取当前线程,然后获取到当前线程的ThreadLocalMap对象,如果非空,那么就以当前线程的ThreadLocal对象作为key取出value,否则进行初始化,初始化就是将initialValue的值set到ThreadLocal中。

每个线程维护的ThreadLocalMap对象的键就是ThreadLocal对象实例,值就是set的那个对象,每次线程在get的时候,都从自己的对象中取值,不存在线程安全问题。ThreadLocal这个变量的状态根本没有发生变化,它仅仅是充当一个key的角色,提供给每一个线程一个初始值。ThreadLocal是通过final类型的threadLocalHashCode变量来区分不同的ThreadLocal实例。

参考:http://www.cnblogs.com/dreamroute/p/5034726.html

https://www.iteye.com/topic/103804

https://www.cnblogs.com/dolphin0520/p/3920407.html

ThreadLocal

原文:https://www.cnblogs.com/xidian2014/p/10322239.html

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