На этот вопрос уже есть ответ здесь:
Я рассмотрел другие вопросы volatile и Atomicxxxx в SO (включая этот ) и прочитал описание java.util.current.atomic , и меня не совсем устраивают нюансы.
Если я пытаюсь выбрать между использованием изменчивое логическое значение
и AtomicBoolean
, Есть ли практические отличия помимо атомарных операций чтения-изменения-записи, предлагаемых AtomicBoolean? (например, compareAndSet ()
и getAndSet ()
)
Предположим, у меня есть
volatile boolean flag;
Затем один или несколько потоков устанавливают флаг (но не сбрасывают его). Если у меня есть один поток, который считывает флаг, и если он установлен, выполняет действие, а затем сбрасывает флаг, достаточно ли volatile
?
Есть ли более высокая стоимость AtomicBoolean, чем volatile boolean, с точки зрения из
volatile boolean
, похоже, требует ограждения памяти, AtomicBoolean
, похоже, требует ограждения памяти + некоторые незначительные блокировки операций CAS согласно java. util.current.atomic description) Мой внутренний призыв - просто перейти на AtomicBoolean и быть в безопасности, но я хочу понять, есть ли ' Когда-либо возникала ситуация, когда вместо этого использовалось volatile boolean
(например, если бы у меня были тысячи их экземпляров и производительность была бы проблемой).