AtomicBoolean vs synchronisierter Block
Ich habe versucht, Thread-Konflikte in meinem Code durch Ersetzen einiger @ auszuschneidesynchronized
Blöcke mitAtomicBoolean
.
Hier ist ein Beispiel mitsynchronized
:
public void toggleCondition() {
synchronized (this.mutex) {
if (this.toggled) {
return;
}
this.toggled = true;
// do other stuff
}
}
Und die Alternative mitAtomicBoolean
:
public void toggleCondition() {
if (!this.condition.getAndSet(true)) {
// do other stuff
}
}
Einen Vorteil ziehen ausAtomicBoolean
ie CAS-Eigenschaft von @ sollte viel schneller sein als die Synchronisation, also habe ich ein @ ausgeführ wenig Mikro-Benchmark.
Für 10 gleichzeitige Threads und 1000000 IterationenAtomicBoolean
kommt nur geringfügig schneller alssynchronized
Block
Durchschnittszeit (pro Thread) für toggleCondition () mit AtomicBoolean: 0.0338
Durchschnittszeit (pro Thread) für toggleCondition () mit Synchronisierung: 0.0357
Ich weiß, dass Mikro-Benchmarks das wert sind, was sie wert sind, aber sollte der Unterschied nicht höher sein?