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

8
задан Denis Bazhenov 18 July 2012 в 23:41
поделиться