/** * 一个ThreadLocal代表一个变量,故其中里只能放一个数据,有两个变量都要线程内共享,则要定义两个ThreadLocal。 */ public class ThreadLocalTest { private static ThreadLocal<Integer> threadData = new ThreadLocal<Integer>(); public static void main(String[] args) { for (int i = 0; i < 2; i++) { new Thread(new Runnable() { public void run() { int data = new Random().nextInt(); System.out.println(Thread.currentThread().getName() + " has put data :" + data); threadData.set(data); new A().get(); new B().get(); } }).start(); } } static class A { public void get() { int data = threadData.get(); System.out.println("A from " + Thread.currentThread().getName() + " get data: " + data); } } static class B { public void get() { int data = threadData.get(); System.out.println("B from " + Thread.currentThread().getName() + " get data: " + data); } } }
输出结果:
Thread-1 has put data :-1978178521 Thread-0 has put data :-227790491 A from Thread-0 get data: -227790491 A from Thread-1 get data: -1978178521 B from Thread-0 get data: -227790491 B from Thread-1 get data: -1978178521