javasynchronizationatomicatomicboolean

Difference between getAndSet and compareAndSet in AtomicBoolean


The thread title should be self-explnatory... I'm a bit confused between the specification of below methos from AtomicBoolean class:

My assemption is that both would result in the same behavior when used as a boolean clause in an if condition:

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

Assuming that I want to retrieve the current flag value and update it automaticlly, shouldn't both methods produce the same behavior?

I would much appreciate any explanations regarding how and when to use each of those if I'm missing internal differences.


Solution

  • The documentation is pretty clear.

    Not surprisingly, compareAndSet takes two arguments.

    In your specific case: