Да предположим две следните реализации на брояча:
class Counter {
private final AtomicInteger atomic = new AtomicInteger(0);
private int i = 0;
public void incrementAtomic() {
atomic.incrementAndGet();
}
public synchronized void increment() {
i++;
}
}
На пръв поглед atomics трябва да бъде по-бърз и по-мащабируем. И те са, вярвам. Но по-бързи ли са от synchronized
блока през цялото време? Или съществуват някои ситуации, когато това правило е нарушено (напр. SMP/машина с един процесор, различен CPU ISA, операционни системи и т.н.)?