gpt4 book ai didi

java - 可以证明应该使用 "volatile"declare 的代码示例

转载 作者:太空狗 更新时间:2023-10-29 22:52:49 24 4
gpt4 key购买 nike

目前我无法理解什么时候我们应该使用volatile来声明变量。

我已经做了一些研究并搜索了很长时间的一些资料,并且知道当一个字段被声明为 volatile 时,编译器和运行时会注意到这个变量是共享的并且不应重新排序对其的操作与其他内存操作。

但是,我还是不明白我们应该在什么场景下使用它。我的意思是有人可以提供任何示例代码来证明使用“volatile”与不使用它相比会带来好处或解决问题吗?

最佳答案

这里是一个例子,说明为什么 volatile 是必要的。如果删除关键字 volatile,线程 1 可能永远不会终止。 (当我在 Linux 上的 Java 1.6 Hotspot 上测试时,情况确实如此 - 您的结果可能会有所不同,因为 JVM 没有义务对未标记为 volatile 的变量进行任何缓存。)

public class ThreadTest {
volatile boolean running = true;

public void test() {
new Thread(new Runnable() {
public void run() {
int counter = 0;
while (running) {
counter++;
}
System.out.println("Thread 1 finished. Counted up to " + counter);
}
}).start();
new Thread(new Runnable() {
public void run() {
// Sleep for a bit so that thread 1 has a chance to start
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {
// catch block
}
System.out.println("Thread 2 finishing");
running = false;
}
}).start();
}

public static void main(String[] args) {
new ThreadTest().test();
}
}

关于java - 可以证明应该使用 "volatile"declare 的代码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com