Разница между getAndSet и compareAndSet в AtomicBoolean
Название темы должно быть самообъяснимым ... Я немного запутался между спецификациями нижеприведенных методовAtomicBoolean
учебный класс:
java.util.concurrent.atomic.AtomicBoolean#compareAndSet
java.util.concurrent.atomic.AtomicBoolean#getAndSet
Моя сборка состоит в том, что оба будут приводить к одинаковому поведению при использовании в качестве логического предложения вif
состояние:
public class Test {
private AtomicBoolean flag = AtomicBoolean(false);
public void processSomeAction() {
if (flag.getAndSet(false)) { // Shouldn't this be similar to flag.compareAndSet(false)
// process some action
}
}
//...
private void internalMutatorMethod() {
// do some staff then update the atomic flag
flas.set(true);
}
}
Предполагая, что я хочу получить текущее значение флага и обновить его автоматически, разве оба метода не должны вызывать одинаковое поведение?
Я был бы очень признателен за любые объяснения относительно того, как и когда использовать каждый из них, если мне не хватает внутренних различий.