[英]How to check another condition before set AtomicBoolean?
我有一个AtomicBoolean并想设置它,如果另一个条件也成立的话:
例如,我们有一个带有“ 活动”和“ 萨尔多”字段的银行帐户。 在方法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();
}
原子的正确解决方案是什么,甚至不用锁也不可能吗?
检查另一个条件并设置布尔值的一种可能方法是使用AtomicMarkableReference。 我是Double类型的示例:
private final AtomicMarkableReference<Double> saldo = new AtomicMarkableReference<>(0.0, true);
@Override
public boolean setInctive() {
return saldo.attemptMark(0.0, false);
}
现在,saldo字段不仅代表当前的saldo,还代表银行帐户的状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.