这个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来运行程序,下面是我设置运行参数的图:
图片描述
是我的参数未设置正确?还是例子不正确呢?

回答:

就算不给 isContinuevolatile 关键字,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

回到顶部