Tytuł wątek powinien być self-explnatory ... Jestem nieco mylić między specyfikacją poniżej Methos z AtomicBoolean
klasy:Różnica między getAndSet i compareAndSet w AtomicBoolean
java.util.concurrent.atomic.AtomicBoolean#compareAndSet
java.util.concurrent.atomic.AtomicBoolean#getAndSet
Moja assecja jest taka, że oba będą powodować takie samo zachowanie, gdy będą używane jako klauzula boolowska w stanie 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);
}
}
Zakładając, że chcę odzyskać aktualną wartość flagi i zaktualizować ją automatycznie, czy obie metody nie powinny generować tego samego zachowania?
Byłbym wdzięczny za wszelkie wyjaśnienia dotyczące tego, jak i kiedy używać każdego z nich, jeśli brakuje wewnętrznych różnic.
compareAndSet ma dwa argumenty. Javadoc wskazuje, że jest zupełnie inny niż getAndSet. - Możesz napisać połączenie do compareAndSet, które robi to samo co getAndSet, ale nie jest to warte pytania. – laune