AtomicBoolean vs bloco sincronizado

Eu estava tentando reduzir a contenção de threads no meu código, substituindo algunssynchronized blocos comAtomicBoolean.

Aqui está um exemplo comsynchronized:

public void toggleCondition() {
    synchronized (this.mutex) {
        if (this.toggled) {
            return;
        }

        this.toggled = true;
        // do other stuff
    }
}

E a alternativa comAtomicBoolean:

public void toggleCondition() {
    if (!this.condition.getAndSet(true)) {
        // do other stuff
    }
}

AproveitandoAtomicBooleanA propriedade CAS deve ser muito mais rápida do que depender da sincronização, então eu executei umpequena micro-referência.

Para 10 threads simultâneos e 1000000 iterações,AtomicBoolean vem apenas um pouco mais rápido do quesynchronized quadra.

Tempo médio (por thread) gasto em toggleCondition () com AtomicBoolean: 0.0338

Tempo médio (por thread) gasto em toggleCondition () com sincronizado: 0,0357

Sei que os micro-benchmarks valem o que valem, mas a diferença não deve ser maior?

questionAnswers(2)

yourAnswerToTheQuestion