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