这个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修饰,去看看volatile关键字的作用

最近刚好也遇到了类似的问题,在这里记录一下原因把。

先说解决方案:

while (isContinue) {
    // 解决方案就是注释掉这句话
    // System.out.println("Continue");
}

说一下我的猜想(不一定正确):
起初我以为是 println 里面的 synchronized 使得工作线程去同步了主线程的值,但是当我把println 换成了 Thread.sleep(1000) ,程序也同样停下来了,所以排除了这个原因。然后我尝试将while(isContinue){} 里换成如下代码:

        while (isContinuePrint) {
            for (int i = 0; i < 100000; i++) {
                int j = i;
                j ++;
            }
        }

while语句里的代码不涉及到任何关于加锁或者和释放CPU时间的时候,程序不会停止。所以,我的最终猜想是可能加锁的代码,或者和释放CPU时间片相关的代码,会影响到主内存和工作内存进行刷新的机制。当然,这只是我的个人猜测,如果有大佬知道为什么,可以回复一下,感谢。