我正在阅读Java中的volatile关键字并完全理解它的理论部分.
但是,我正在寻找的是一个很好的案例,它展示了如果变量不是易变的话会发生什么.
下面的代码段不能按预期工作(取自here):
class Test extends Thread {
boolean keepRunning = true;
public void run() {
while (keepRunning) {
}
System.out.println("Thread terminated.");
}
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
t.start();
Thread.sleep(1000);
t.keepRunning = false;
System.out.println("keepRunning set to false.");
}
}
理想情况下,如果keepRunning不是volatile,则线程应该无限期地继续运行.但是,它会在几秒钟后停止.
我有两个基本问题:
>任何人都可以用例子解释volatile吗?不是来自JLS的理论.
>是同步的易失性替代品吗?它是否实现了原子性?