This question already has answers here:
Volatile boolean vs AtomicBoolean
(11个答案)
1年前关闭。
我已经看过SO中的其他volatile与Atomicxxxx问题(包括this one),并阅读了the description of java.util.current.atomic,我对细微差别并不满意。
如果我要决定使用
假设我有
然后,一个或多个线程设置该标志(但不清除它)。如果我有一个线程读取该标志,并且设置了该标志,则执行一个操作,然后清除该标志,
就以下方面而言,AtomicBoolean是否比可变 boolean 值的成本更高?
内存空间 性能受到影响(
我的直觉是只使用AtomicBoolean并确保安全,但是我想了解是否存在使用
(11个答案)
1年前关闭。
我已经看过SO中的其他volatile与Atomicxxxx问题(包括this one),并阅读了the description of java.util.current.atomic,我对细微差别并不满意。
如果我要决定使用
volatile boolean
和AtomicBoolean
之间的区别,除了AtomicBoolean提供的原子读取-修改-写入操作之外,是否还有其他实际区别? (例如compareAndSet()
和getAndSet()
)假设我有
volatile boolean flag;
然后,一个或多个线程设置该标志(但不清除它)。如果我有一个线程读取该标志,并且设置了该标志,则执行一个操作,然后清除该标志,
volatile
是否足够?就以下方面而言,AtomicBoolean是否比可变 boolean 值的成本更高?
volatile boolean
似乎需要内存防护,AtomicBoolean
似乎需要内存防护+根据java.util.current.atomic描述对CAS操作进行一些较小的锁定)我的直觉是只使用AtomicBoolean并确保安全,但是我想了解是否存在使用
volatile boolean
的情况(例如,如果我有成千上万的实例,而性能是一个问题)。 最佳答案
基本上所有AtomicBoolean
都是对象中的volatile boolean
。
每个对象的开销很小。可能微不足道,但可能会有更多的内存进入缓存。
如果您需要使用AtomicBooleanFieldUpdater
,那么会产生很多性能开销,如果您不经常使用它(NIO中的attach
)也可以。
关于java - 什么时候在Java中使用volatile boolean 而不是AtomicBoolean更可取? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4876122/
10-12 21:21