Предположим, две следующие реализации счетчика:
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, ОС и т. д.)?