多线程对象资源管理的学习例子备忘

xiaoxiao2021-02-28  75

import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadScope { private static int data = 0; private static Map<Thread,Integer> threadMap = new HashMap<Thread,Integer>(); private static ThreadLocal<Integer> t = new ThreadLocal<Integer>(); public static void main(String[] args) { ExecutorService es = Executors.newCachedThreadPool(); for(int i=0;i<10;i++){ es.execute/*new Thread*/(new Runnable(){ @Override public void run() { int data =new Random().nextInt(); System.out.println(Thread.currentThread().getName()+"Main out data : "+data); //threadMap.put(Thread.currentThread().getName(), data); // t.set(data); ThreadLocalInstance instance = ThreadLocalInstance.getInstance(); instance.setName("zhangsan"); instance.setAge(data); new A().ap(); new B().ap(); } })/*.start()*/; } } static class A{ // int data = threadMap.get(Thread.currentThread().getName()); // int data = t.get(); ThreadLocalInstance instance = ThreadLocalInstance.getInstance(); String name = instance.getName(); int age = instance.getAge(); private void ap(){ System.out.println(Thread.currentThread().getName()+" A out data : "+data+"[ name :"+name +",age: "+age+"]"); } } static class B{ // int data = threadMap.get(Thread.currentThread().getName()); // int data = t.get(); ThreadLocalInstance instance = ThreadLocalInstance.getInstance(); String name = instance.getName(); int age = instance.getAge(); private void ap(){ System.out.println(Thread.currentThread().getName()+" B out data : "+data+"[ name :"+name +",age: "+age+"]"); } } static class ThreadLocalInstance{ private static ThreadLocal<ThreadLocalInstance> t = new ThreadLocal<ThreadLocalInstance>(); private ThreadLocalInstance(){} public static ThreadLocalInstance getInstance(){ ThreadLocalInstance ins = t.get(); if(ins == null){ ins = new ThreadLocalInstance(); t.set(ins); } return ins; } 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-57773.html

最新回复(0)