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
}
}
AproveitandoAtomicBoolean
A 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?