Os blocos sincronizados podem ser mais rápidos que o Atomics?

Suponha duas seguintes implementações de contador:

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

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

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

À primeira vista, os átomos devem ser mais rápidos e mais escaláveis. E eles são, eu acredito. Mas eles são mais rápidos quesynchronized bloqueia o tempo todo? Ou existem algumas situações em que essa regra é violada (por exemplo, SMP / CPU única, diferentes CPUs, SOs etc.)?

questionAnswers(5)

yourAnswerToTheQuestion