多线程编程1.2-----Map封装各线程独享数据
2014-09-01 14:52
253 查看
package zhu;
/**
* 需求:
* 为保证同一个线程调用的函数所使用的资源相同
* 也就是 线程独享自己的数据 比如:银行转账 同一线程内共享连接,不同线程独立连接
*方案:
* 使用map集合封装 线程的变量 和 线程对应的名字
* 可以使用ThreadLocal类解决
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadScopeShareData {
private static int data=0;
private static Map<Thread,Integer> map = new HashMap<>();//map集合相当于 一个线程对应一个数据
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();
map.put(Thread.currentThread(), data);
System.out.println(Thread.currentThread().getName()+" get data:"+data);
new A().getData();
new B().getData();
}
}
).start();
}
static class A{
void getData(){
int data = map.get(Thread.currentThread());
System.out.println("A from"+Thread.currentThread().getName()+" get data:"+data);
}
}
static class B{
void getData(){
int data = map.get(Thread.currentThread());
System.out.println("B from"+Thread.currentThread().getName()+" get data:"+data);
}
}
static class C{
void getData(){
System.out.println("C from"+Thread.currentThread().getName()+" get data:"+data);
}
}
}
/**
* 需求:
* 为保证同一个线程调用的函数所使用的资源相同
* 也就是 线程独享自己的数据 比如:银行转账 同一线程内共享连接,不同线程独立连接
*方案:
* 使用map集合封装 线程的变量 和 线程对应的名字
* 可以使用ThreadLocal类解决
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadScopeShareData {
private static int data=0;
private static Map<Thread,Integer> map = new HashMap<>();//map集合相当于 一个线程对应一个数据
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();
map.put(Thread.currentThread(), data);
System.out.println(Thread.currentThread().getName()+" get data:"+data);
new A().getData();
new B().getData();
}
}
).start();
}
static class A{
void getData(){
int data = map.get(Thread.currentThread());
System.out.println("A from"+Thread.currentThread().getName()+" get data:"+data);
}
}
static class B{
void getData(){
int data = map.get(Thread.currentThread());
System.out.println("B from"+Thread.currentThread().getName()+" get data:"+data);
}
}
static class C{
void getData(){
System.out.println("C from"+Thread.currentThread().getName()+" get data:"+data);
}
}
}
相关文章推荐
- 【C/C++多线程编程之十】pthread线程私有数据
- 多线程编程之线程的封装
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- 多线程(四) 实现线程范围内模块之间共享数据及线程间数据独立(Map集合)
- 多线程(四) 实现线程范围内模块之间共享数据及线程间数据独立(Map集合)
- java多线程编程之向线程传递数据的三种方法
- 高级并发编程之 线程范围内安全共享数据(使用Map方式)
- 多线程编程——线程间共享数据(临界区&互斥锁)
- 【多线程编程】线程私有数据(TSD)
- 多线程编程艺术(4)-线程间数据传输
- java多线程编程之从线程返回数据的两种方法
- 多线程编程之线程的封装
- 【C/C++多线程编程之十】pthread线程私有数据
- linux程序设计 线程 多线程编程 信号量
- 多线程编程之四——线程的同步(转载)
- 多线程编程之三——线程间通讯(转载)
- ◆Delphi多线程编程之三 同步读写全局数据 ◆(乌龙哈里2008-10-12)
- Solaris2.4 多线程编程指南1--线程基础
- 多线程编程之四——线程的同步
- [读书笔记[CoreJava2AdvancedFeatures][多线程]1.2中断线程