为什么程序不打印9而不是0?
AtomicInteger也没有帮助(建议)
public class threadOne{
//Integer i=0;
AtomicInteger i=new AtomicInteger(0);
class firstThread implements Runnable{
AtomicInteger i;
firstThread(AtomicInteger i){
this.i=i;
}
public void run(){
while(i.intValue()<10){
i.incrementAndGet();
}
}
}
void runThread(){
Thread t = new Thread(new firstThread(i));
t.start();
System.out.println("Result : " + i.intValue());
}
public static void main(String[] args){
new threadOne().runThread();
}
}
最佳答案
切记:您正在打印的是i
的threadOne
,而不是firstThread
两个类别中的Integer i
彼此独立。一个方面的变化不会影响另一个方面。 Integer
是一个不变的类。
例如,
Integer i = 4;
Integer j = i;
j = 1; //same as j = new Integer(1);
System.out.println(i);
它打印
4
,而不是1
。用同样的方式,i+=1
中的firstThread
不会影响正在打印的i
中的threadOne
。您可以使用可变类,如AtomicInteger,该类可以完成您期望的操作,或者仅打印
i
的firstThread
编辑:您需要等待线程执行完成才能看到更改。做
Thread t = new Thread(new firstThread(i));
t.start();
try{
t.join();
}catch(Exception e){}
System.out.println("Result : " + i.get());