ThreadLocal用例

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/// :~