我非常清楚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秒后读取更改。此设置从未失败。
我的问题是:
这是如何运作的?是本机操作系统不允许缓存?
我能得到哪些实际失败的例子吗?