【发布时间】:2016-08-24 19:16:30
【问题描述】:
AtomicBoolean 的 Oracle JDK Javadoc 声明:
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html
可以自动更新的布尔值。见 java.util.concurrent.atomic 包规范的描述 原子变量的属性。 AtomicBoolean 用于 应用程序,如原子更新的标志,不能用作 替换布尔值。
我和一位同事试图找出 AtomicBoolean 不能替代的用例,我们唯一能想到的是 Boolean 对象具有 AtomicBoolean 没有的方法。
这是唯一的原因,还是在写这篇文章时有其他想法?
【问题讨论】:
-
Boolean是不可变的;根据定义,AtomicBoolean不是。 -
我在任何答案中都没有看到的一件事:性能。任何原子和线程安全的东西总是比它的“香草”替代品性能低。
-
是的,我同意@DavidGrinberg - AtomicBoolean 比直接布尔值或原始布尔值慢。有时候,你真的不在乎额外的东西
-
注意:此页面上的所有内容均等效于
AtomicIntegervsInteger和AtomicLongvsLong。 -
@David 好吧,这只是因为 Java 需要类包装器(另一方面,Scala 在某种程度上已经允许值类型)。
struct AtomicInteger应该具有与在其他语言中可以看到的原语完全相同的性能。这并没有改变这本来就是一个坏主意的事实:AtomicBooleandocuments 程序员的意图。它应该很少使用,因此当您看到它时会脱颖而出。出于相同和其他原因,C++ 使用std::atomic,尽管它们可以轻松扩展bool而不会出现性能问题。
标签: java api-design