Unterschied zwischen getAndSet und compareAndSet in AtomicBoolean
The Thread-Titel sollte selbsterklärend sein ... Ich bin ein bisschen verwirrt zwischen der Spezifikation von unten Methos vonAtomicBoolean
class:
java.util.concurrent.atomic.AtomicBoolean#compareAndSet
java.util.concurrent.atomic.AtomicBoolean#getAndSet
Meine Annahme ist, dass beide zu demselben Verhalten führen würden, wenn sie als boolesche Klausel in einem @ verwendet würdeif
Bedingung
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);
}
}
Angenommen, ich möchte den aktuellen Flag-Wert abrufen und automatisch aktualisieren, sollten dann nicht beide Methoden dasselbe Verhalten erzeugen?
Ich würde mich über Erklärungen darüber freuen, wie und wann ich diese verwenden soll, wenn interne Unterschiede fehlen.