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

Ответы на вопрос(5)

Ваш ответ на вопрос