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