gpt4 book ai didi

java - AtomicBoolean,设置一次标志,有必要吗?静态 boolean 值可以吗?

转载 作者:行者123 更新时间:2023-12-01 18:18:08 24 4
gpt4 key购买 nike

我正在设置一个标志,该标志由任何设置它的线程设置一次。所有其他线程都会在不同的时间,经常重复读取此标志。

现在我使用的是 AtomicBoolean,它工作得很好,但我知道如果经常查询它,它可能比普通 boolean 值慢得多(不确定这是否属实)。

将其更改为静态 boolean 值是否是线程安全的?无论谁能做到这一点,都可以将标志设置为 true,事实上,所有人都可能被允许多次设置标志。

我担心的是那些阅读旗帜的人能够多快地发现它?会是对的吗?或者他们可能没有理解正确?

此外,使用经常查询的 AtomicBoolean 对性能的影响有多大?

此外,我是否应该考虑在 AtomicBoolean 上使用 volatile boolean 值,因为我几乎只会设置一次并读取它,并且可以原子地执行设置操作(复制 AtomicBoolean 中的代码以获取 getAndSet())

最佳答案

当大多数线程只读取变量并且只有其中一个线程会更改值时,您无需担心性能。 AtomicBoolean 使用名为 CAS 的机制现在大多数现代处理器都支持它,并且是低级操作。由于使用 CAS,读取值时几乎没有任何缺点(这与使用标准锁不同)。在您描述的场景中, volatile 静态 boolean 值就足够了 - volatile 阻止jvm在从变量读取时进行优化,例如重用寄存器中保存的值而不是检查内存中的值,因此每当一个线程更改变量的值时,其他线程都会看到改变。在您的情况下,两种解决方案都会给出相似的性能结果(即使不是相同的性能结果)。在有大量写入操作的场景中,Volatile 会比 AtomicBoolean 更快,但说实话,我无法想象你有大量写入操作而没有人有兴趣阅读的场景。

关于java - AtomicBoolean,设置一次标志,有必要吗?静态 boolean 值可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28397445/

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