java - volatile boolean 值与原子 boolean 值

标签 java concurrency boolean volatile atomicboolean

AtomicBoolean 做了哪些 volatile boolean 无法实现的功能?

最佳答案

当所述字段仅由其所有者线程更新并且该值仅由其他线程读取时,我使用 volatile 字段,您可以将其视为发布/订阅场景,其中有许多观察者但只有一个发布者。但是,如果这些观察者必须根据字段的值执行一些逻辑,然后推回一个新值,那么我会使用 Atomic* vars 或锁或同步块(synchronized block),只要最适合我。在许多并发场景中,它归结为获取值,将其与另一个值进行比较并在必要时进行更新,因此 Atomic* 类中存在 compareAndSet 和 getAndSet 方法。

查看 java.util.concurrent.atomic 的 JavaDocs包含 Atomic 类列表的包,并很好地解释了它们的工作原理(刚刚了解到它们是无锁的,因此它们比锁或同步块(synchronized block)更有优势)

关于java - volatile boolean 值与原子 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3786825/

相关文章:

java - 如何测试事务数据库代码?

c++ - C++ 中的伊辛模型

java - 为什么 indexof 对于在 java 中转换为列表的数组会失败?

无论是否选中,Django BooleanField 都会返回 False(空)

java - Java 如何处理以下场景?

java - 为什么 QuickSort 使用 O(log(n)) 额外空间?

java - HashSet 中的 equals 方法

java - 在 Java 中为线程添加额外的方法?

scala - 嵌套 Future.sequence 按顺序执行包含的 Futures

multithreading - 使用 `Rc` 和 `thread_local!` 在多个线程之间共享包含 `OnceCell` 引用的静态延迟初始化对象