这个Volatile的例子是有错误么?如何运行才能使其一直运行下去?
想问一下各位大神,我想得到一个Volatile的使用案例,这是以下代码,按照下面的代码,
如果我设置jvm运行参数为 -server 的时候,应该会一直运行下去,程序进入死循环,但实际上
并没有,这是为什么呢?
public class Main { public static void main(String[] args) {
VolatileThread volatileThread = new VolatileThread();
volatileThread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
volatileThread.setContinue(false);
}
}
public class VolatileThread extends Thread{ private boolean isContinue = true;
public void setContinue(boolean aContinue) {
isContinue = aContinue;
}
@Override
public void run() {
while (isContinue){
System.out.println("Continue");
}
System.out.println("end");
}
}
我使用IDEA来运行程序,下面是我设置运行参数的图:
是我的参数未设置正确?还是例子不正确呢?
回答:
就算不给 isContinue
加 volatile
关键字,JVM 最终也会把修改后的 isContinue
值同步到别的线程,volatile
只是让这种共享数据的修改立即通知到别的线程。
想要让程序一直运行下去的话可以这么改:
public class VolatileThread extends Thread { private boolean isContinue = true;
public void setContinue(boolean aContinue) {
isContinue = aContinue;
}
@Override
public void run() {
boolean localContinue = isContinue;
while (localContinue){
System.out.println("Continue");
}
System.out.println("end");
}
}
以上是 这个Volatile的例子是有错误么?如何运行才能使其一直运行下去? 的全部内容, 来源链接: utcz.com/p/177676.html