AtomicBoolean против синхронизированного блока

Я пытался сократить конфликт потоков в моем коде, заменив некоторыеsynchronized блоки сAtomicBoolean.

Вот пример сsynchronized:

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

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

И альтернатива сAtomicBoolean:

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

ВоспользовавшисьAtomicBooleanсвойство CAS должно быть намного быстрее, чем полагаться на синхронизацию, поэтому я запустилмаленький микро-тест.

Для 10 одновременных потоков и 1000000 итераций,AtomicBoolean приходит только немного быстрее, чемsynchronized блок.

Среднее время (на поток), затраченное на toggleCondition () с AtomicBoolean: 0,0338

Среднее время (на поток), затраченное на toggleCondition () с синхронизированным: 0,0357

Я знаю, что микропроцессоры стоят того, чего они стоят, но не должна ли разница быть выше?

Ответы на вопрос(2)

Ваш ответ на вопрос