0
import java.util.concurrent.TimeUnit;

public class Test {

    public static void main(String[] args) {
        MyObject myObject = new MyObject();
        new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            myObject.stop();
            System.out.println("Thread1 stop the loop");
        }).start();

/*        while (myObject.loop){

        }*/
        while (myObject.loop) {
            System.out.println("1");
        }

        System.out.println("Main thread exist");
    }

    public static class MyObject {
        private boolean loop = true;
        public void stop() {
            this.loop = false;
        }
    }
}


在上面的程序中,loop是一个没有volatile的普通变量,如果loop是空的

while (myObject.loop){}

主线程不能停止,但是如果有body的循环

        while (myObject.loop) {
            System.out.println("1");
        }

,然后它能够​​停止。在我看来,主要的tad不知道变量已经改变,所以它不应该停止。但是为什么第二个循环结束了?

4

0 回答 0