package com.wqx.lang;
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);
}
}
为什么线程会被停止,按道理说没有加volatile,线程内存中的b应该还是true才对?
把System.out.println(b);去掉线程又不能够停止,有人能够说明一下为什么会出现这样状况
线程安全呀,用volatile跟类型对应原子类型或者直接用锁
volatile只是阻止寄存器优化,就是每次变量有了变化,都要从主存中去读取新数据,而不是用缓存中的数据。但是你修改了b变量后,另一个线程还是可能读取到更新以后的数据。只是没有volatile那么快。主要是寄存器的优化