线程之ThreadLocal

    xiaoxiao2025-06-17  7

         之前线程共享,使用的是map来实现的,JDK本身就有一个实现机制叫做ThreadLocal。看下面这段代码是如何实现的。

    public class ThreadLocalTest {     private static ThreadLocal<MyThreadScopeData> myThreadScopeData=new ThreadLocal<MyThreadScopeData>();          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);                     MyThreadScopeData.getInstance().setName("name"+data);                     MyThreadScopeData.getInstance().setAge(data);                                          new A().get();                     new B().get();                 }             }).start();         }     }          static class A{         public void get(){             MyThreadScopeData myData=MyThreadScopeData.getInstance();             System.out.println("A from"+Thread.currentThread().getName()                     +" getMyData: "+myData.getName()+" , "+myData.getAge());         }     }          static class B{         public void get(){             MyThreadScopeData myData=MyThreadScopeData.getInstance();             System.out.println("B from"+Thread.currentThread().getName()                     +" getMyData: "+myData.getName()+" , "+myData.getAge());         }     }      } class MyThreadScopeData{     private MyThreadScopeData(){};     private static ThreadLocal<MyThreadScopeData> map=new ThreadLocal<MyThreadScopeData>();          public static MyThreadScopeData getInstance(){         MyThreadScopeData instance=map.get();                  if(instance==null){             instance=new MyThreadScopeData();             map.set(instance);         }         return instance;     }          private String name;     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;     }     private int age; }

    转载请注明原文地址: https://ju.6miu.com/read-1300047.html
    最新回复(0)