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 ausAtomicBooleanie 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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage