【发布时间】:2015-04-20 18:15:17
【问题描述】:
我创建了以下程序,它运行具有相同线程实例的两个线程。我已经初始化了一个计数器,当每个线程运行时,应该实现计数器值,最后它应该在控制台中输出。
public class MTThread {
static int count = 0;
public static void main(String arg[]){
System.out.println("Main started");
MTThreadInner in1= new MTThreadInner(1,count);
MTThreadInner in2= new MTThreadInner(2,count);
in1.start();
in2.start();
while (true) {
try {
in1.join();
in2.join();
break;
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Main finished, count = :"+ count);
}}
class MTThreadInner extends Thread {
int num; int counter;
MTThreadInner(int i,int z) {
counter=z;
num = i;
}
public void run(){
// TODO Auto-generated constructor stub
yield();
System.out.println("This ran Thread "+ num);
counter=counter+1;
}
}
但是输出总是显示计数为“0”:
主要开始
这运行了线程 1
这运行线程 2
主要完成,count = :0
【问题讨论】:
-
它应该打印
count = 0你能解释一下为什么你期望count会改变吗? -
随着thread1结束,值增加1,线程两次运行后,值也增加,但我认为count值没有返回
-
每个线程都获取它自己的值 0 的本地副本并将其递增到 1。这不会与
count共享或复制到任何地方。
标签: java multithreading count