我对ThreadLocal的理解
2017-09-27 13:58
351 查看
网上转了一圈,发现很多对ThreadLocal讲解的文章都有些混乱,讲的不够清楚。
这边说一说我自己的理解。
网上有些人将ThreadLocal和synchronized进行比较,其实这两者没什么关系,使用场景也完全不同。
ThreadLocal说白了,只是为了在多线程环境下方便变量的访问和传递罢了。这也就是为什么ThreadLocal的实例常常设为static属性,就是为了方便访问。
例如
那么我们每个线程访问value的时候其实访问到的是他的副本,这个和每个线程内部维持一个局部变量是等价的。 如下图
那么将这个变量暴露出来而不是作为线程的局部变量,就是为了方便访问。如果该线程需要调用其他对象的方法,就不可避免的要传递局部变量value,那么为了省去这种麻烦,才使用一个static类型的Threadlocal,这样无论在什么地方,直接访问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对象就可以获得该线程对应的值了。
相关文章推荐
- ThreadLocal的使用理解
- 通通透透理解ThreadLocal,实现安全的多线程
- 彻底理解ThreadLocal
- 理解ThreadLocal
- 理解Java中的ThreadLocal
- 彻底理解ThreadLocal(转)
- 通过一个工具类更深入理解动态代理和Threadlocal
- 深入理解ThreadLocal
- 正确理解ThreadLocal
- 关于ThreadLocal的初步理解
- ThreadLocal 理解
- 彻底理解ThreadLocal
- 彻底理解ThreadLocal
- ThreadLocal的理解
- 理解高并发(17).threadlocal原理及用法
- 理解ThreadLocal —— 一个map的key
- 理解ThreadLocal
- 正确理解ThreadLocal
- 彻底理解ThreadLocal
- 彻底理解ThreadLocal