1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| public class Solution { private static ThreadLocal<String> threadLocal_1 = new ThreadLocal<>() { @Override public String initialValue() { return "initialVal_1"; } } private static ThreadLocal<String> threadLocal_2 = ThreadLocal.withInitial(() -> "initialVal_2"); public static void method() { Thread td_1 = new Thread(() -> { threadLocal_1.set("td_1_threadLocal_1"); threadLocal_2.set("td_1_threadLocal_2"); System.out.ptintln("td_1_threadLocal_1: " + threadLocal_1.get()); System.out.println("td_1_threadLocal_2: " + threadLocal_2.get()); threadLocal_1.remove(); threadLocal_2.remove(); System.out.println("after remove, threadLocal_1: " + threadLocal_1.get()); System.out.println("after remove, threadLocal_2: " + threadLocal_2.get()); }); Thread td_2 = new Thread(() -> { threadLocal_1.set("td_2_threadLocal_1"); threadLocal_2.set("td_2_threadLocal_2"); try { Thread.sleep(2000); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println("after sleep 2000ms, td_2_threadLocal_1: " + threadLocal_1.get()); System.out.println("after sleep 2000ms, td_2_threadLocal_2: " + threadLocal_2.get()); threadLocal_1.remove(); threadLocal_2.remove(); System.out.println("after remove, threadLocal_1: " + threadLocal_1.get()); System.out.println("after remove, threadLocal_2: " + threadLocal_2.get()); }); td_1.start(); td_2.start(); } }
|