有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在设置AtomicBoolean之前检查另一个条件?

我有一个原子布尔值,如果另一个条件也是真的,我想设置它:

例如,我们有一个带有活动Saldo字段的银行账户。在方法设置活动中,我必须检查Saldo字段是否完全为零,然后将活动字段设置为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();
}

原子和原子能的正确解决方案是什么 不使用锁也可以这样做吗


共 (1) 个答案

  1. # 1 楼答案

    检查另一个条件并设置布尔值的一种可能方法是使用AtomicMarkableReference。我是一个双重类型的例子:

    private final AtomicMarkableReference<Double> saldo = new AtomicMarkableReference<>(0.0, true);
    
    @Override
    public boolean setInctive() {
        return saldo.attemptMark(0.0, false);
    }
    

    saldo字段现在不仅表示当前的saldo,还表示银行帐户的状态