码迷,mamicode.com
首页 > 其他好文 > 详细

ThreadLocal

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

标签:shc   nal   使用   相同   www   不同   自己的   thread   类型   

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

标签:shc   nal   使用   相同   www   不同   自己的   thread   类型   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!