【问题标题】:Why java.util.concurrent.atomic.AtomicBoolean is internally implemented with int?为什么 java.util.concurrent.atomic.AtomicBoolean 在内部用 int 实现?
【发布时间】:2012-11-23 08:59:44
【问题描述】:

AtomicBoolean 将其值存储在:

private volatile int value;

然后,例如,提取它的值是这样完成的:

    public final boolean get() {
    return value != 0;
}

这背后的原因是什么?为什么没有使用boolean

【问题讨论】:

  • 因为在机器级别没有布尔值,只有整数。

标签: java multithreading concurrency atomic java.util.concurrent


【解决方案1】:

AFAIK,int 是可以跨不同机器类型实现的最小类型 CAS 操作。

注意:由于对象分配是 8 字节对齐的,因此使用较小的类型不会节省任何内存。

【讨论】:

    【解决方案2】:

    这可能是为了能够将多个Atomic 类建立在同一个基(Unsafe)上,它使用整数并提供比较和交换操作。

    Concurrency in Practice 很好地解释了内部工作原理。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      相关资源
      最近更新 更多