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
Я знаю, что микропроцессоры стоят того, чего они стоят, но не должна ли разница быть выше?