Предположим, две следующие реализации счетчика:
class Counter {
private final AtomicInteger atomic = new AtomicInteger(0);
private int i = 0;
public void incrementAtomic() {
atomic.incrementAndGet();
}
public synchronized void increment() {
i++;
}
}
На первый взгляд атомарность должна быть быстрее и масштабируемее. И они есть, я верю. Но всегда ли они быстрее блоков synchronized
? Или существуют ситуации, когда это правило нарушается (, например. SMP/однопроцессорная машина, различные ЦП ISA, ОС и т. д. )?