20160529_线程范围内数据共享
来源:互联网 发布:淘宝羊皮女背包 编辑:程序博客网 时间:2024/05/23 15:24
</pre><pre name="code" class="java">//建立两个线程两个线程中的数据在本线程内共享,与其他线程之间独立package com.dahua.xiaozhe;import java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadScopShareData { static Map<Thread , Integer > mThreadDataMap = new HashMap<Thread,Integer>(); public static void main(String[] args) { for (int i = 0 ; i < 2 ; i++){ new Thread(new Runnable() { @Override public void run() { int data = new Random().nextInt(100); mThreadDataMap.put(Thread.currentThread(), data); System.out.println(Thread.currentThread().getName() + "put data:"+data); //取值 new A().get(); new B().get(); } }).start(); } } static class A{ public void get(){ int data = mThreadDataMap.get(Thread.currentThread()); System.out.println(Thread.currentThread() +"use A get data:" +data); } } static class B{ public void get(){ int data = mThreadDataMap.get(Thread.currentThread()); System.out.println(Thread.currentThread() +"use B get data:" +data); } }}
结果:
Thread-0put data:18Thread-1put data:36Thread[Thread-1,5,main]use A get data:36Thread[Thread-0,5,main]use A get data:18Thread[Thread-1,5,main]use B get data:36Thread[Thread-0,5,main]use B get data:18
2.用ThreadLocal加单例封装来实现
<span style="font-size:12px;">package com.dahua.xiaozhe;import java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadLocalScopShareData {static Map<Thread , Integer > mThreadDataMap = new HashMap<Thread,Integer>();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(100);mThreadDataMap.put(Thread.currentThread(), data);//保存ThreadLocalSharedData.getThreadInstance().setName("name"+data);ThreadLocalSharedData.getThreadInstance().setAge(data);System.out.println(Thread.currentThread().getName() + "put data:"+ThreadLocalSharedData.getThreadInstance());//取值new A().get();new B().get();}}).start();}}static class A{public void get(){System.out.println(Thread.currentThread() +"use A get data:" +ThreadLocalSharedData.getThreadInstance());}}static class B{public void get(){System.out.println(Thread.currentThread() +"use B get data:" +ThreadLocalSharedData.getThreadInstance());}}}//对线程共享的数据进行封装class ThreadLocalSharedData{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;}//构造函数私有化,单例模式private ThreadLocalSharedData(){}@Overridepublic String toString() {return "ThreadLocalSharedData [name=" + name + ", age=" + age + "]";}//保存线程数据static ThreadLocal<ThreadLocalSharedData> map= new ThreadLocal<ThreadLocalSharedData>();//单例模式static ThreadLocalSharedData getThreadInstance(){ThreadLocalSharedData instance = map.get();if(instance == null){instance = new ThreadLocalSharedData();map.set(instance);}return instance;}} </span>
结果:
Thread-0put data:ThreadLocalSharedData [name=name73, age=73]Thread-1put data:ThreadLocalSharedData [name=name60, age=60]Thread[Thread-1,5,main]use A get data:ThreadLocalSharedData [name=name60, age=60]Thread[Thread-0,5,main]use A get data:ThreadLocalSharedData [name=name73, age=73]Thread[Thread-1,5,main]use B get data:ThreadLocalSharedData [name=name60, age=60]Thread[Thread-0,5,main]use B get data:ThreadLocalSharedData [name=name73, age=73]
0 0
- 20160529_线程范围内数据共享
- 多线程_线程范围内数据共享
- 线程范围内共享数据
- 线程范围内数据共享
- 线程范围内共享数据
- 线程范围内共享数据
- ThreadLocal线程范围内共享数据
- 同一线程范围内数据共享
- 线程范围内共享数据(一)
- 线程范围内共享数据(二)
- 线程范围内的数据共享
- java多线程:4、线程范围内的数据共享_公共变量
- ThreadLocal实现线程范围内的数据共享
- 黑马程序员-线程范围内数据共享
- 线程范围内的共享数据 ThreadLocal
- 《黑马程序员》线程范围内的数据共享
- ThreadLocal类实现线程范围内数据共享
- java线程范围内的数据共享
- Cache——缓存
- zigbee基础应用(三)外部中断
- Least Squares Method & Gradient Descent
- 理工OJ刷题分数晋级前三十——纪念一下(坚持才是你对)
- Linux驱动开发、18-I2C子系统之用户态驱动设计
- 20160529_线程范围内数据共享
- 让开发自动化: 选择持续集成服务器
- $.fn.extend和$.extend的理解
- Linux下安装gcc 、g++ /gfortran编译器
- Asp.NET中AsyncPostBackTrigger的作用
- LeetCode-227.Basic Calculator II
- N!的位数两种方法求解
- tuxedo客户端测试程序
- Android学习(57) -- xUtils简介使用