为什么即使不使用volatile变量,java程序也能完美运行?

时间:2018-02-19 14:59:05

标签: java operating-system volatile

我非常清楚volatile变量是什么,但是,如果没有使用volatile,我从未见过任何失败的设置。 根据线程(Do you ever use the volatile keyword in Java?)中接受的答案的情况,尝试复制设置,但程序工作得很好。见下文。

class VolatileTest extends Thread{
    boolean isRunning = true;

    public void run(){
        while(isRunning){
            System.out.println("volatile test");
        }
    }

}

public class App 
{
    public static void main( String[] args ) throws InterruptedException
    {
        VolatileTest volatileTest = new VolatileTest();
        volatileTest.start();

        Thread.sleep(2000l);
        volatileTest.isRunning = false;
    }
}

如果isRunning为true,则一个线程运行并打印“volatile test”(我假设它将被缓存)。在主线程中,我正在更改isRunning的值。这里,其他线程能够在2秒后读取更改。此设置从未失败。

我的问题是:

  1. 这是如何运作的?是本机操作系统不允许缓存?

  2. 我能得到哪些实际失败的例子吗?

0 个答案:

没有答案