ThreadLocal用例
1/**
2 * 线程本地变量的简单使用
3 *
4 * @author wangy
5 * @version 1.0
6 * @date 2020/5/17 / 15:14
7 */
8public class ThreadLocalVariableHolder {
9 // Java 8 提供的方法
10 private static final ThreadLocal<Integer> VALUE
11 = ThreadLocal.withInitial(() -> {
12 Random r = new Random();
13 return r.nextInt(10);
14 });
15
16 /** 每个线程独享一个本地变量,互不影响 */
17 static class Task implements Runnable {
18
19 static void increment() {
20 VALUE.set(VALUE.get() + 1);
21 }
22
23 static Integer getValue() {
24 return VALUE.get();
25 }
26
27 @Override
28 public String toString() {
29 return Thread.currentThread() + ": " + getValue();
30 }
31
32 @Override
33 public void run() {
34 while (!Thread.currentThread().isInterrupted()) {
35 increment();
36 System.out.println(this);
37 }
38 }
39 }
40
41 public static void main(String[] args)
42 throws InterruptedException {
43 for (int i = 0; i < 2; i++) {
44 new Thread(new Task()).start();
45 }
46 TimeUnit.MILLISECONDS.sleep(20);
47 System.exit(0);
48 }
49}
50
51/// :~
52// Thread[Thread-1,5,main]: 2
53// Thread[Thread-0,5,main]: 5
54// Thread[Thread-1,5,main]: 3
55// Thread[Thread-0,5,main]: 6
56// Thread[Thread-1,5,main]: 4
57// Thread[Thread-0,5,main]: 7
58// Thread[Thread-1,5,main]: 5
59/// :~