java线程内共享数据,为什么不加这个变更就会出错?? 400 报错
package day14多线程.Zxx;
import java.util.HashMap; import java.util.Map; import java.util.Random;
public class ThreadScopeSharData { // 线程范围内的共享数据,各自线程上的数据是独立的;在线程内共享,在线程外独立;
protected static int Numbers;
protected static Map<Thread,Integer> ThreadShar = 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 Numbers = new Random().nextInt();
System.out.println("Main" + Thread.currentThread().getName() + "==" + Numbers);
ThreadShar.put(Thread.currentThread(), Numbers);
new ModuleA().show();
new ModuleB().show();
}
}).start();
}
}
static class ModuleA {
public void show() {
int Numbers = ThreadShar.get(Thread.currentThread());
//这里不加 int,而是这样, Numbers = ThreadShar.get(Thread.currentThread());
//就无法实现线程内共享的功能,为什么呢? 在run方法里的put方法中存放的是局部的变量numbers,
//然后又用这个线程去拿,应该拿到的是还是自己这个线程对应的值啊?
//可是不对,不加这个int就是错;
System.out.println("A___" + Thread.currentThread().getName() + "==" + Numbers);
}
}
static class ModuleB {
public void show() {
int Numbers = ThreadShar.get(Thread.currentThread());
System.out.println("B___" + Thread.currentThread().getName() + "==" + Numbers);
}
}
}
请先学一下优秀的参数或者属性命名规范,然后确定一下你的Numbers有哪些定义,是什么作用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。