【发布时间】:2015-01-21 15:54:52
【问题描述】:
如果我需要对对象内的 int 字段进行原子访问,将字段声明为 AtomicInteger 就足够了,还是需要使用 AtomicIntegerFieldUpdater? (为什么?)
【问题讨论】:
-
定义原子访问。你想让什么样的操作序列成为原子的?
-
多个线程将递增/递减该字段。
如果我需要对对象内的 int 字段进行原子访问,将字段声明为 AtomicInteger 就足够了,还是需要使用 AtomicIntegerFieldUpdater? (为什么?)
【问题讨论】:
使用AtomicInteger 就足够了。原子更新器用于volatile 字段;主要用例是具有大量需要原子访问的字段的数据结构;您可以使用字段更新程序来使用具有原子语义的字段,而无需为每个字段提供 AtomicInteger 引用。
有关详细讨论,请参阅this link。
【讨论】:
AtomicInteger 和朋友通常就足够了,而且通常更可取,因为它不涉及反射或其他此类骇客。
AtomicIntegerFieldUpdater 在您有很多需要更新的实例时很有用,因为这会减少对象的总数。如果除了直接读取和写入之外的操作不常见,它特别有用。例如,AtomicReferenceFieldUpdater 在 java.nio 中用于 attach 方法,通常设置一次(公开为 get-and-set)并读取多次。
【讨论】:
【讨论】: