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
}
}
AprovechandoAtomicBoolean
La 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?