-------
android培训、
java培训、期待与您交流! ----------
package cn.itcast.thread;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class TraditionalThreadScopeShareData {
private static int data = 0;
/**
* 线程间的数据共享
我们创建了一个静态的变量,它是被全局的类的所有对象共享
我们开启了2类分别使用这两个类来获取全部类的数据。
我们开启了一个子线程在子线程中设置全局变量的值。
并且使用两个类的对象来获取全部变量的值
我们想创建更多的线程只需要在上面的操作外面加上一个循环就可以的。
即:一个线程里面调用两个模块,在线程的任务中给全部变量赋值。
然后我们把这样的操作执行2次。即有两个线程,每个线程里面都给全部变量
赋值,并且每个线程里面都有两个模块在获取全部变量的值
*
Thread-1 has put data:1545966076
A from:Thread-1 get:1545966076
Thread-0 has put data:-1617580063
A from:Thread-0 get:-1617580063
B from:Thread-1 get data:-1617580063
B from:Thread-0 get data:-1617580063
我们上面并没有实现线程范围内的数据共享。
现在我们要实现这种效果:
其实就是每个线程上的模块获取的数据都是相同的。
即各自线程上的数据应该是独立的。
Thread-0 has put data:-753735773
Thread-1 has put data:568646196
A from:Thread-0 get:-753735773
A from:Thread-1 get:568646196
B from:Thread-0 get data:-753735773
B from:Thread-1 get data:568646196
每个线程都有各自的数据
*/
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() { // 使用线程启动三个模块
@Override
public void run() {
int data = new Random().nextInt();
System.out.println(Thread.currentThread().getName()
+ " has put data:" + data);
//存储数据
//把当前的线程做为key,随机生成的数添加到集合中。
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()
+ " get:" + data);
}
}
static class B {
public void get() {
//取数据
int data=threadData.get(Thread.currentThread());
System.out.println("B from:" + Thread.currentThread().getName()
+ " get data:" + data);
}
}
}