Java中最简单易懂的易失性关键字示例
我正在阅读Java中的易失性关键字,并完全理解其中的理论部分。
但是,我正在寻找的是一个很好的例子,它显示了如果变量不是易失性的,如果它是可变的,会发生什么。
下面的代码片段无法按预期工作(取自此处):
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
我有两个基本问题:
- 任何人都可以用例子来解释挥发性吗?不是JLS的理论。
- 易失性是否替代同步?它实现了原子性吗?