线程局部变量threadlocal

ThreadLocal

​ 使用了ThreadLocal之后,当前线程修改的值不会影响其他线程中该变量的值,也就是说这部分数据只会存在线程的独占区中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class  {

static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();

public static void main(String[] args) {
new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(2L);
System.out.println(threadLocal.get());
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "c2").start();

new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(1L);
threadLocal.set(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "c1").start();
}
}

​ 这里虽然线程c1修改了threadlocal的值,但是c2线程获取到的还是null。

ThreadLocal的内存泄漏问题