Unterschied zwischen getAndSet und compareAndSet in AtomicBoolean

Den thread-Titel sollte selbsterklärend sein explnatory... ich bin ein bisschen verwirrt zwischen der Spezifikation von unten methos aus AtomicBoolean Klasse:

  • java.util.concurrent.atomic.AtomicBoolean#compareAndSet
  • java.util.concurrent.atomic.AtomicBoolean#getAndSet

Meine assemption ist, dass Ergebnis wäre das gleiche Verhalten, wenn verwendet, wie eine Boolesche Klausel in einem if Zustand:

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);
  }
}

Wenn ich zum abrufen der aktuellen flag-Wert und aktualisieren Sie es automaticlly, sollten nicht beide Methoden liefern das gleiche Verhalten?

Ich würde sehr schätzen alle Erläuterungen, wie und Wann jeder von denen, wenn ich bin fehlen die internen Unterschiede.

  • compareAndSet hat zwei argument. Die javadoc-zeigt an, dass es völlig anders aus getAndSet. - Sie können schreiben, ein Anruf für compareAndSet, die macht das gleiche wie getAndSet, aber das ist kaum der Rede Wert die Frage.
InformationsquelleAutor tmarwen | 2015-01-26
Schreibe einen Kommentar