Diferença entre getAndSet e compareAndSet em AtomicBoolean
O título do tópico deve ser auto-explicativo ... Estou um pouco confuso entre a especificação dos methos abaixo deAtomicBoolean
classe:
java.util.concurrent.atomic.AtomicBoolean#compareAndSet
java.util.concurrent.atomic.AtomicBoolean#getAndSet
Minha suposição é que ambos resultariam no mesmo comportamento quando usados como uma cláusula booleana em umif
condição:
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);
}
}
Supondo que eu queira recuperar o valor do sinalizador atual e atualizá-lo automaticamente, os dois métodos não devem produzir o mesmo comportamento?
Eu apreciaria muito todas as explicações sobre como e quando usar cada uma delas, se estiver faltando diferenças internas.