有没有办法在 java 中实现线程安全/原子的 if-else 条件?

Is there a way to implement an if-else condition that is threadsafe/ atomic in java?

举个例子:

 public class XYZ{
    private AtomicInteger var1;
    private int const_val;

    // these all attributes are initialized with a constructor, when an instance of the class is called.

    // my focus is on this method, to make this thread-safe
    public boolean isPossible(){
        if(var1 < const_val){
            var1.incrementAndGet();
            return true;
        }
        else{
            return false;
        }
    }
}

如果我不能使用锁定机制(在 java 中),如何制作这个(整个“if-else”片段)thread-safe/atomic?

我阅读了有关 AtomicIntegers 的内容,并阅读了有关 AtomicBooleans 的内容,我可以使用它们使此代码段线程安全吗?

您可以无条件递增,并在读取时强制执行最大值,而不是在写入时强制执行最大值,如下所示:

public boolean increment(){
    return var1.getAndIncrement() < const_val;
}

public int getVar1() {
    return Math.min(const_val, var1.get());
}

假设您对这个变量所做的一切就是增加它。该解决方案的一个问题是它最终可能导致溢出。如果这可能是一个问题,您可以切换到 AtomicLong。

像这样应该可以解决问题。

public boolean isPossible(){
    for(;;){
        int current = var1.get();
        if(current>=max){
            return false;
        }
        
        if(var1.compareAndSet(current, current+1)){
            return true;
        }
    }
    
}