为啥 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,为啥它受到保护?