import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* 同一个线程(同一个Thread.currentThread())共享同一份数据,不同线程数据不同
* @author MrRock
*运行结果
* Main--->Thread-0 data is : -90400073
threadA--->Thread-0 data is : -90400073
threadB--->Thread-0 data is : -90400073
Main--->Thread-1 data is : 840715215
threadA--->Thread-1 data is : 840715215
threadB--->Thread-1 data is : 840715215
*
*/
public class ThreadShareData {
//使用map来存放数据,key为当前线程,value为要共享的数据
private static Map<Thread,Integer> currentThread = new HashMap<Thread,Integer>();
public static void main(String[] args) {
for (int i = 1; i <= 2; i++) {
new Thread(new Runnable() {
@Override
public void run() {
int data = new Random().nextInt();
currentThread.put(Thread.currentThread(), data);
System.out.println("Main--->" + Thread.currentThread().getName() + " data is : " + data);
new A().getData();
new B().getData();
}
}).start();
}
}
static class A {
void getData() {
//从map中取出当前线程的值
int data = currentThread.get(Thread.currentThread());
System.out.println("threadA--->" + Thread.currentThread().getName() + " data is : " + data);
}
}
static class B {
void getData() {
//从map中取出当前线程的值
int data = currentThread.get(Thread.currentThread());
System.out.println("threadB--->" + Thread.currentThread().getName()+ " data is : " + data);
}
}
}