多執行緒(一)ThreadLocal 執行緒內資料共享
阿新 • • 發佈:2018-12-11
每個執行緒單獨一份資料ThreadLocal
import java.util.Random; public class D { // public static ThreadLocal<Integer> map=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()+":"+data); // map.set(data); // ThreadData.getThreadInstance().setAge(data); ThreadData.getThreadInstance().setName(data); new DD().a(); new DD().b(); } } ).start(); } } static class DD{ public void a() { // Integer a = map.get(); ThreadData instance = ThreadData.getThreadInstance(); System.out.println(Thread.currentThread().getName()+ "--A--name:"+instance.getName()+ "--age:"+instance.getAge()); } public void b() { // Integer b = map.get(); ThreadData instance = ThreadData.getThreadInstance(); System.out.println(Thread.currentThread().getName()+ "--B--name:"+instance.getName()+ "--age:"+instance.getAge()); } } } class ThreadData{ public static ThreadLocal<ThreadData> threadMap=new ThreadLocal<ThreadData>(); private ThreadData() {} public static ThreadData getThreadInstance() { ThreadData threadData = threadMap.get(); if(threadData==null) { threadData=new ThreadData(); threadMap.set(threadData); } return threadData; } private int name; private int age; public int getName() { return name; } public void setName(int name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }