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.)?