【问题标题】:java - Atomic access to field within objectjava - 对对象内字段的原子访问
【发布时间】:2015-01-21 15:54:52
【问题描述】:

如果我需要对对象内的 int 字段进行原子访问,将字段声明为 AtomicInteger 就足够了,还是需要使用 AtomicIntegerFieldUpdater? (为什么?)

【问题讨论】:

  • 定义原子访问。你想让什么样的操作序列成为原子的?
  • 多个线程将递增/递减该字段。

标签: java atomic


【解决方案1】:

使用AtomicInteger 就足够了。原子更新器用于volatile 字段;主要用例是具有大量需要原子访问的字段的数据结构;您可以使用字段更新程序来使用具有原子语义的字段,而无需为每个字段提供 AtomicInteger 引用。

有关详细讨论,请参阅this link

【讨论】:

    【解决方案2】:

    AtomicInteger 和朋友通常就足够了,而且通常更可取,因为它不涉及反射或其他此类骇客。

    AtomicIntegerFieldUpdater 在您有很多需要更新的实例时很有用,因为这会减少对象的总数。如果除了直接读取和写入之外的操作不常见,它特别有用。例如,AtomicReferenceFieldUpdaterjava.nio 中用于 attach 方法,通常设置一次(公开为 get-and-set)并读取多次。

    【讨论】:

      【解决方案3】:

      除了biziclop的评论(见链接):

      Are java primitive ints atomic by design or by accident?

      以防万一您还没有遇到过。

      【讨论】:

        猜你喜欢
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 2017-03-06
        • 1970-01-01
        相关资源
        最近更新 更多