为什么程序不打印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();

    }

}

最佳答案

切记:您正在打印的是ithreadOne,而不是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,该类可以完成您期望的操作,或者仅打印ifirstThread

编辑:您需要等待线程执行完成才能看到更改。做

Thread t = new Thread(new firstThread(i));
t.start();
try{
    t.join();
}catch(Exception e){}
System.out.println("Result : " + i.get());

09-26 04:23