我需要一个简单的使用示例volatile
Java 中的关键字,由于不使用而导致行为不一致volatile
.
理论部分volatile用法对我来说已经很清楚了。
首先,没有保证由于非易失性变量而暴露缓存的方式。您的 JVM 可能一直对您非常友善,并且有效地将每个变量视为易失性变量。
话虽这么说,有几种方法可以提高线程缓存其自己版本的非易失性变量的可能性。这是一个程序,它揭示了我测试过的大多数机器中易失性的重要性(改编版本来自here https://stackoverflow.com/questions/2787094/how-to-demonstrate-java-multithreading-visibility-problems):
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 set to false.
并继续运行。制作keepRunning
易失性导致它打印
keepRunning set to false.
Thread terminated.
并终止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)