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

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

Вот пример с синхронизированным :

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 ' s Свойство CAS должно быть намного быстрее, чем полагаться на синхронизацию, поэтому я провел небольшой микротест .

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

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

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

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

7
задан biasedbit 3 October 2010 в 00:33
поделиться