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);
}
}
}