繁体   English   中英

设置AtomicBoolean之前如何检查其他条件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM