public class ThreadLocalTest {// public static Map data = new Hashtable(); public static ThreadLocal threadLocal = new ThreadLocal(); public static Random random = new Random(); public static class Task implements Runnable{ @Override public void run() { // 在Run方法中,随机生成一个变量(线程要关联的数据),然后以当前线程名为key保存到map中 int i = random.nextInt(1000);// String name = Thread.currentThread().getName();// System.out.println("线程["+name+"]生成的随机数是:" + i);// data.put(name,i); String name = Thread.currentThread().getName(); System.out.println("在线程[" +name + "]保存的值是:" + i ); threadLocal.set(i); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } new OrderService().createOrder();//调用OrderService里的createOrder()方法 // 在Run方法竣事之前,以当前线程名获取出数据并打印。查察是否可以取出操纵// Object o = data.get(name); Object o = threadLocal.get();// System.out.println("在线程["+name+"]快竣事时取出关联的数据是:" + o); System.out.println("在线程["+name+"]快竣事时取出关联的数据是:" + o); } } public static void main(String[] args) { for (int i = 0; i < 3; i++) { new Thread(new Task()).start(); } }}
复制代码
OrderService:
public class OrderService { public void createOrder(){ String name = Thread.currentThread().getName(); System.out.println("OrderService 当前线程[" + name + "]中保存的数据是:" + ThreadLocalTest.threadLocal.get()); new OrderDao().saveOrder(); }}
复制代码
OrderDao:
public class OrderDao { public void saveOrder(){ String name = Thread.currentThread().getName(); System.out.println("OrderDao 当前线程[" + name + "]中保存的数据是:" + ThreadLocalTest.threadLocal.get()); }}