为啥 java.util.concurrent.atomic.AtomicBoolean 在内部用 int 实现?

Posted

技术标签:

【中文标题】为啥 java.util.concurrent.atomic.AtomicBoolean 在内部用 int 实现?【英文标题】: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

【问题讨论】:

因为在机器级别没有布尔值,只有整数。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于为啥 java.util.concurrent.atomic.AtomicBoolean 在内部用 int 实现?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?