我经常会遇到这样的情况:我希望这个问题可以像这样解决:
AtomicBoolean bool1 = new AtomicBoolean();
AtomicBoolean bool2 = new AtomicBoolean();
boolean expected = false; // whatever
boolean update = false; // whatever
if(bool1.get()) {
bool2.compareSet(expected, update);
}
但这不起作用,因为bool1.get()
和bool2.compareSet(...)
之间可能存在上下文切换。所以需要的是我称之为“三元原子布尔”的东西,它可以在一次CAS操作中执行bool1.get()
和bool2.compareSet(...)
。
我的问题是它是否可以完成。有没有人知道有人在考虑这个问题(一些大学)或有人知道现有的解决方案接近所需(我的意思是没有锁,同步块,互斥,semapores,但使用CAS仅基于算法。
答案 0 :(得分:5)
使用AtomicInteger,它也有一个CompareSet方法,并将布尔值建模为位域。您可以在一个整数中建模32个布尔值。