线程基础(二)ThreadLocal实现线程范围内的共享变量

xiaoxiao2021-02-28  38

一 ThreadLocal实现线程范围内的共享变量

   

  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; }            }

转载请注明原文地址: https://www.6miu.com/read-2627143.html

最新回复(0)