private volatile boolean
flag
=
false;
给flag加上volatile关键字就不会死循环了。
我猜应该是因为没有额外的语句,所以线程1修改后的flag的值一直在CPU缓存中,没有更新到内存,然后主线程也没有从内存里读值。
或者是编译器自动优化?这个不太懂,感觉应该是内存中的flag值没有更新,看内存和CPU缓存这些也不会调试啊,求大神解答。