AtomicBoolean vs bloque sincronizado

Estaba tratando de reducir la contención de hilos en mi código reemplazando algunossynchronized bloques conAtomicBoolean.

Aquí hay un ejemplo consynchronized:

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

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

Y la alternativa conAtomicBoolean:

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

AprovechandoAtomicBooleanLa propiedad CAS debería ser mucho más rápida que confiar en la sincronización, así que ejecuté unpequeño micro punto de referencia.

Para 10 hilos concurrentes y 1000000 iteraciones,AtomicBoolean viene solo un poco más rápido quesynchronized bloquear.

Tiempo promedio (por subproceso) dedicado a toggleCondition () con AtomicBoolean: 0.0338

Tiempo promedio (por subproceso) dedicado a toggleCondition () con sincronizado: 0.0357

Sé que los micro-puntos de referencia valen lo que valen, pero ¿no debería ser mayor la diferencia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta