public class VolatileBoolean extends Thread{
private boolean b = true;
@Override
public void run() {
while(b){
System.out.println(b);
}
System.out.println("run 结束");
}
public static void main(String[] args) throws InterruptedException {
VolatileBoolean volatileBoolean = new VolatileBoolean();
volatileBoolean.start();
Thread.sleep(1000);
volatileBoolean.b = false;
System.out.println("设置 false");
Thread.sleep(1000);
}
}
这个程序会正常结束 打印出 “run 结束”。
如果我们去掉System.out.println(b); 这句代码。
public class VolatileBoolean extends Thread{
private boolean b = true;
@Override
public void run() {
while(b){
//System.out.println(b);
}
System.out.println("run 结束");
}
public static void main(String[] args) throws InterruptedException {
VolatileBoolean volatileBoolean = new VolatileBoolean();
volatileBoolean.start();
Thread.sleep(1000);
volatileBoolean.b = false;
System.out.println("设置 false");
Thread.sleep(1000);
}
}
代码执行结果却是不能停止 ,也不会打印 “run 结束”
自己分析不出为什么会这样,希望有人可以帮助理解一下