多线程_线程范围内数据共享
来源:互联网 发布:美墨边境 知乎 编辑:程序博客网 时间:2024/05/29 10:35
线程内的数据共享
1需求:①线程1的A模块和B模块只能操作属于线程1的相同数据
② 线程2的A模块和B模块只能操作属于线程2的相同数据。
2、实现机制
①使用ThreadLocal实现线程内的数据共享,其实它内部就是一个Map
②通过一个Map<Thread,Object> 来存放与读取对应Thread的数据Object
3、代码
①Map方式:
import java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadScopeShareData {//将线程和其数据放入一个Map里面存起来private static Map<Thread,Integer> threadData=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();System.out.println(Thread.currentThread().getName()+" has put data: "+ data);threadData.put(Thread.currentThread(), data);new A().get();new B().get();}}).start();}}static class A{public void get(){ int data=threadData.get(Thread.currentThread());System.out.println("A from"+Thread.currentThread().getName()+" has get data: "+data);}}static class B{public void get(){int data=threadData.get(Thread.currentThread());System.out.println("B from"+Thread.currentThread().getName()+" has get data: "+data);}}}
②使用ThreadLocal类
import java.util.Random;public class ThreadLocalTest {//使用ThreadLocal实现线程内的数据共享,其实它内部就是一个Mapprivate static ThreadLocal<Integer> x=new ThreadLocal<Integer>();public static void main(String[] args) {for(int i=0;i<3;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);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()+" has get data: "+data);}}static class B{public void get(){int data=x.get();System.out.println("B from"+Thread.currentThread().getName()+" has get data: "+data);}}}
- 多线程_线程范围内数据共享
- 20160529_线程范围内数据共享
- java多线程:4、线程范围内的数据共享_公共变量
- 线程范围内共享数据
- 线程范围内数据共享
- 线程范围内共享数据
- 线程范围内共享数据
- 多线程并发库高级应用 之 线程范围内共享数据
- 多线程之线程范围内的数据共享ThreadLocal
- 多线程并发库高级应用 之 线程范围内共享数据
- Java基础:多线程之线程范围内的数据共享ThreadLocal
- 多线程学习(四)-线程范围内共享数据
- java多线程:5、线程范围内的数据共享_ThreadLocal
- java多线程学习(三)---线程范围内数据共享
- 【多线程】-线程范围内共享数据的两种方式
- ThreadLocal线程范围内共享数据
- 同一线程范围内数据共享
- 线程范围内共享数据(一)
- 多线程
- 测试WM_TIMER 消息 以及计时器
- Ubuntu 12.04 软件管理
- 湖南科技大学OJ Ignatius and the Princess I 加强
- 关于hibernate查询
- 多线程_线程范围内数据共享
- 多线程_普通锁和读写锁
- 多线程_线程池的几种类型
- 我的移植经验之谈,简单的Rom移植教程——附移植JoyOS实例
- rhel/linux下如何找出网卡驱动的内核模块名称
- 什么是Spring
- 多线程的文件上传小示例
- Splash界面的实现
- hibernate constrained属性