为什么Java中没有AtomicBooleanArray数据类型?

5

我注意到在Java中没有类似于AtomicIntegerArray的AtomicBooleanArray数据类型。虽然我可以使用AtomicBoolean[]来满足当前的需求,但我很好奇为什么AtomicBooleanArray不是库的一部分。

如果您对此有任何想法,将不胜感激。

谢谢


你可以尝试在JSR166并发邮件列表上提问。 - Dror Bereznitsky
2个回答

3

AtomicBoolean实际上包装了一个int,它的值为0或1表示false或true。这是因为它使用基于int的compareAndSwap方法,而不是更小的方法。

你可以实现一个AtmoicBooleanArray,但不太干净,这也许就是为什么它不存在的原因。即JVM不支持原子布尔操作,因为像x64和ARM这样的CPU不支持它。


我知道长整型和双精度浮点型不支持原子操作,但布尔类型是新的。感谢您的指引。 - JProgrammer
@J程序员,long类型支持原子操作,因此您也可以实现double类型的原子操作。请参阅AtomicLong和AtomicLongArray。相比byte、char和short类型,它是一个没有内在支持的布尔类型。 - Peter Lawrey

0

我认为如果你只将0(false)和1(true)值赋给AtomicIntegerArray,那么它可以被视为AtomicBooleanArray。所以为什么要写重复的代码呢?


1
有趣。但我的问题是,既然可以用int代替boolean,为什么Java中还要有boolean? - JProgrammer
由于布尔类型是几乎每个Java程序中都使用的基本类型,因此它被添加以提高代码可读性。此外,布尔变量只需一个比特位,而整数则需要32个比特位。 - Maxim Kirilov
@J程序员 boolean 可以比 int 小4倍,BitSet 可以比 int[] 小32倍。 - Peter Lawrey
@Maxim,感谢您的回复。我知道这些数据类型的空间占用情况,但想要深入了解。 - JProgrammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接