假设以下两个计数器实现:
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,操作系统等)?