开发者社区> 问答> 正文

java线程内共享数据,为什么不加这个变更就会出错?? 400 报错

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

}

 

展开
收起
爱吃鱼的程序员 2020-06-05 13:35:36 458 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    请先学一下优秀的参数或者属性命名规范,然后确定一下你的Numbers有哪些定义,是什么作用

    2020-06-05 13:35:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载