public class T01_HelloVolatile {
/*volatile*/boolean running = true;
void m(){
System.out.println("m start");
while (running){
}
System.out.println("m end");
}
public static void main(String[] args) {
T01_HelloVolatile t = new T01_HelloVolatile();
new Thread(t::m,"t1").start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.running = false;
}
}
为什么加不加volatile,都是休息一秒后 m end!
volatile不保证原子性,能够保证可见性;
不加volatile,可见性不一定能保证,但也没说“绝对不可见”
谢谢,我刚试了 之前用的1.8.0_112确实存在这个问题,刚下载了1.8.0_271就没问题了。