public class ThreadScopShareData { //线程范围内的共享变量 private static int data = 0; //单个变量线程共享 //private static ThreadLocal<Integer> x = new ThreadLocal<Integer>(); public static void main(String[] args) { for(int i = 0;i<2;i++) { new Thread(new Runnable() { @Override public void run() { data = new Random().nextInt(); System.out.println(Thread.currentThread().getName()+" has put data:"+data); //x.set(data); MyThreadScopData.getThreadInstance().setName("name "+data); MyThreadScopData.getThreadInstance().setAge(data); new A().get(); new B().get(); } }).start(); } } static class A{ public void get() { //int data = x.get(); /*System.out.println("A from "+Thread.currentThread().getName()+" get data:"+data);*/ MyThreadScopData mydata = MyThreadScopData.getThreadInstance(); System.out.println("A from "+Thread.currentThread().getName()+" get Mydata:"+mydata.getName()+","+ MyThreadScopData.getThreadInstance().getAge()); } } static class B{ public void get() { //int data = x.get(); /*System.out.println("B from "+Thread.currentThread().getName()+" get data:"+data);*/ MyThreadScopData mydata = MyThreadScopData.getThreadInstance(); System.out.println("B from "+Thread.currentThread().getName()+" get Mydata:"+mydata.getName()+","+ MyThreadScopData.getThreadInstance().getAge()); } } } //单利模式,获取当前线程的一个实例对象 //多个变量的线程共享 class MyThreadScopData{ private MyThreadScopData() {} public static MyThreadScopData getThreadInstance() { MyThreadScopData instance = threadlocal.get(); if(instance == null) { instance = new MyThreadScopData(); threadlocal.set(instance); } return instance; } private static ThreadLocal<MyThreadScopData> threadlocal = new ThreadLocal<MyThreadScopData>(); private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
