package com.linkage.housecard.congress;
public class MyVolatile {
//volatile线程之间的可见性
private /*volatile*/ static boolean isRunning = true;
public void m() {
System.out.println("runnning start");
while (isRunning) {
// System.out.println("abc");//这一段不注释,isRunning改变并输出
}
System.out.println("runnning end");
}
public static void main(String[] args) {
MyVolatile myVolatile = new MyVolatile();
new Thread(new Runnable() {
@Override
public void run() {
myVolatile.m();
System.out.println("............"+myVolatile.isRunning);
}
}).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//myVolatile.isRunning = false;
myVolatile.isRunning=false;
System.out.println("............");
}
}
请问大佬们,System.out.println("abc");这一段代码注释了,则isRunning不会改变,不跳出循环。这一段代码不注释,则isRunning会改变,且可以跳出循环,请问这是什么原理?谢谢了