0
我有一个的AtomicBoolean并要设置它,如果其他条件也是如此:如何在设置AtomicBoolean之前检查另一个条件?
例如,我们有与活动和Saldo领域的BankAccount。在setInctive方法中,我必须检查Saldo字段是否完全为零,然后将Active字段设置为false。
这是我的解决方案,但我不确定这是否真的起作用!
private final AtomicBoolean active = new AtomicBoolean(true);
private final AtomicReference<Double> saldo = new AtomicReference<>(0.0);
@Override
public boolean setInctive() {
//First: check if saldo is 0.0
//Second: set active to false
saldo.getAndUpdate(aDouble -> {
if(aDouble == 0)
active.set(false);
return aDouble;
});
//return negated value of the active field
return !active.get();
}
什么是与原子能一个正确的解决方案, 是这甚至可能不使用锁吗?
算法有什么问题?对我来说似乎没问题。 –
请参阅AtomicStampedReference。允许您轻松地将两个值放在一个原子中。或者,只需使用包含布尔值和双精度的对象的AtomicReference。 – jtahlborn
@jtahlborn谢谢!这是正确的方向。通过AtomicMarkableReference,可以检查两个值(Double和Boolean)。 – cansik