次の 2 つのカウンターの実装があるとします。
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/シングル CPU マシン、異なる CPU ISA、OS など) が存在しますか?