Czy zsynchronizowane bloki mogą być szybsze niż Atomics?

Załóżmy, że dwie następujące implementacje licznika:

class Counter {
  private final AtomicInteger atomic = new AtomicInteger(0);
  private int i = 0;

  public void incrementAtomic() {
    atomic.incrementAndGet();
  }

  public synchronized void increment() {
    i++;
  }
}

Na pierwszy rzut oka atomizm powinien być szybszy i bardziej skalowalny. Sądzę, że są. Ale czy są szybsze niżsynchronized blokuje cały czas? Lub niektóre sytuacje istnieją, gdy ta reguła jest zepsuta (np. Maszyna SMP / pojedynczy procesor, inny procesor ISA, system operacyjny itp.)?

questionAnswers(5)

yourAnswerToTheQuestion