我正在阅读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
不是易失性的,线程应该无限期地运行。但是,它确实会在几秒钟后停止。
我有两个基本问题:
https://stackoverflow.com/questions/17748078
复制相似问题