您的位置:首页 > 编程语言 > Java开发

我对ThreadLocal的理解

2017-09-27 13:58 351 查看
网上转了一圈,发现很多对ThreadLocal讲解的文章都有些混乱,讲的不够清楚。

这边说一说我自己的理解。

网上有些人将ThreadLocal和synchronized进行比较,其实这两者没什么关系,使用场景也完全不同。

ThreadLocal说白了,只是为了在多线程环境下方便变量的访问和传递罢了。这也就是为什么ThreadLocal的实例常常设为static属性,就是为了方便访问。

例如

public static ThreadLocal<Integer> value= new ThreadLocal<Integer>() {
public Integer initialValue() {
return 0;
}
};


那么我们每个线程访问value的时候其实访问到的是他的副本,这个和每个线程内部维持一个局部变量是等价的。 如下图

public class TestThread extends Thread{

int value=0;
}


那么将这个变量暴露出来而不是作为线程的局部变量,就是为了方便访问。如果该线程需要调用其他对象的方法,就不可避免的要传递局部变量value,那么为了省去这种麻烦,才使用一个static类型的Threadlocal,这样无论在什么地方,直接访问Threadlocal对象就可以获得该线程对应的值了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 java