雨翔河
首页
列表
关于
关于ThreadLocal的理解
2016-10-30 13:12
## ThreadLocal > ThreadLocal是一个关于创建线程局部变量的类。 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。 1. 创建,支持泛型,有get,set方法 ``` ThreadLocal<String> stringThreadLocal = new ThreadLocal<>(); ``` 2. 简单使用 ``` private void test() { Thread t = new Thread() { ThreadLocal<String> stringThreadLocal = new ThreadLocal<>(); @Override public void run() { super.run(); stringThreadLocal ("www.yuxianghe.net"); stringThreadLocal (); } }; t.start(); } ``` 3. 为ThreadLocal设置默认的get初始值,需要重写initialValue方法. 4. 实际上ThreadLocal的值是放入了当前线程的一个ThreadLocalMap实例中,所以只能在本线程中访问,其他线程无法访问。ThreadLocal实例实际上也是被其创建的类持有。而ThreadLocal的值其实也是被线程实例持有。它们都是位于堆上,只是通过一些技巧将可见性修改成了线程可见。关于堆和栈的比较,请参考[Java中的堆和栈的区别](https://my.oschina.net/lavedream/blog/498220) 。 5. 它的使用场景有: 实现单个线程单例以及单个线程上下文信息存储,比如交易id等。 实现线程安全,非线程安全的对象使用ThreadLocal之后就会变得线程安全,因为每个线程都会有一个对应的实例。 承载一些线程相关的数据,避免在方法中来回传递参数。
类型:工作
标签:threadlocal,java
Copyright © 雨翔河
我与我周旋久
独孤影
开源实验室