同一个线程(同一个Thread.currentThread())共享同一份数据

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

  

posted @ 2012-05-16 20:19  MrRock  阅读(411)  评论(0编辑  收藏  举报