gpt4 book ai didi

java - 线程 volatile

转载 作者:行者123 更新时间:2023-12-02 11:07:57 25 4
gpt4 key购买 nike

我正在阅读有关 java 中的 volatile 的内容,这里有一个很好的解释 http://tutorials.jenkov.com/java-concurrency/volatile.html .

它说在某些情况下不稳定是好的......

where only Thread 1 writes to the shared counter variable, declaring the counter variable volatile is enough to make sure that Thread 2 always sees the latest written value.

volatile int counter = 0;

但是,当两个线程,线程 1 写入 (counter++) volatile 并且线程 2 同时读取 volatile 时,线程 2 的计数器可能会变为 0。(将计数器变为 1 意味着线程 2会等待 Thread1 写入,但 volatile 中不存在原子性,或者 Thread1 比 Thread2 稍快。理想情况下,假设它们相同)

那么在这种情况下 volatile 有什么意义呢?

最佳答案

Volatile 用于确保修改后的计数器值正确传播到所有线程。它还提示 Java 编译器不要以不安全的方式优化变量。因此,如果没有 volatile ,则可能会出现以下情况:

int 计数器 = 0;

线程1:修改计数器,将其设置为1。Java编译器优化代码,因此值1存储在CPU寄存器或CPU缓存中。

线程 2:几微秒后,线程 2 读取计数器,但它仍然为 0,因为线程 1 尚未将计数器刷新到共享内存中。

关于java - 线程 volatile ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50794504/

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