线程资源共享3
来源:互联网 发布:淘宝里的企业店铺好吗 编辑:程序博客网 时间:2024/05/23 01:25
public class ThreadLocalTest {//这是第三种改进的方式用为线程数据共享。这种方式主要设计思想是运用单例模式,当每个线程产生的对应的对象存放到一个ThreadLocal中去。//然后在线程中来获取。private static ThreadLocal<Integer> x = new ThreadLocal<Integer>();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(){@Overridepublic void run() {int data = new Random().nextInt();System.out.println(Thread.currentThread().getName() + " has put data :" + data);x.set(data);/*MyThreadScopeData myData = new MyThreadScopeData();myData.setName("name" + data);myData.setAge(data);myThreadScopeData.set(myData);*///获取当前线程的对象以及从对对象里面获得参数MyThreadScopeData myThreadScopeData = MyThreadScopeData.getThreadInstance();myThreadScopeData.setName("name" + data);myThreadScopeData.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);/*MyThreadScopeData myData = myThreadScopeData.get();;System.out.println("A from " + Thread.currentThread().getName() + " getMyData: " + myData.getName() + "," +myData.getAge());*/MyThreadScopeData myData = MyThreadScopeData.getThreadInstance();System.out.println("A from " + Thread.currentThread().getName() + " getMyData: " + myData.getName() + "," +myData.getAge());}}static class B{public void get(){int data = x.get();System.out.println("B from " + Thread.currentThread().getName() + " get data :" + data);MyThreadScopeData myData = MyThreadScopeData.getThreadInstance();System.out.println("B from " + Thread.currentThread().getName() + " getMyData: " + myData.getName() + "," +myData.getAge());}}}class MyThreadScopeData{private MyThreadScopeData(){}//当前不需要同步,因为ThreadLocal对象保存的仅仅是当前线程上的资源,不会发生错乱public static /*synchronized*/ MyThreadScopeData getThreadInstance(){MyThreadScopeData instance = map.get();if(instance == null){instance = new MyThreadScopeData();map.set(instance);}return instance;}//private static MyThreadScopeData instance = null;//new MyThreadScopeData();//单例的两种方式,饱汉式和恶汉式,一般来说,恶汉式需要同步private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>();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;}}
- 线程资源共享3
- 多线程线程资源共享问题
- java回忆录(3)—ThreadLocal解决线程资源共享问题
- iosGCD线程安全之资源共享
- python manager 实现线程资源共享
- 线程间资源共享(线程同步)
- 嵌入式导论3:资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- 资源共享
- Linux进程管理(3):总结
- OMNET++(1)总体介绍
- 第五周任务1-4
- 第五周 任务二扩展一(枚举类型)
- 求最小公倍数和最大公约数的方法
- 线程资源共享3
- 小程序
- Mysql.h找不到 linux ubuntu
- java中会存在内存泄漏
- 一败涂地
- 用 Eclipse 平台进行 C/C++ 开发——CDT的使用
- java面试笔试(一)
- OMNeT++(2)NED
- asp aspx php jsp万能密码