Атомарная операция — действие, которое фактически происходит сразу или не происходит вообще Пример: java.util.concurrent.atomic.AtomicInteger
Взаимное исключение — предотвращает одновременный доступ к общему ресурсу Пример: synchronized
С подходом взаимное исключение SynchronizedCounter
является потокобезопасным,
class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
При использовании атомарной переменной AtomicCounter
является потокобезопасным,
import java.util.concurrent.atomic.AtomicInteger;
class AtomicCounter {
private AtomicInteger c = new AtomicInteger(0);
public void increment() {
c.incrementAndGet();
}
public void decrement() {
c.decrementAndGet();
}
public int value() {
return c.get();
}
}
1) Почему в приведенном выше коде подход с атомарной переменной лучше, чем подход с взаимным исключением?
2) В общем, не совпадают ли цели подхода взаимное исключение и атомарная переменная?
AtomicInteger
), когда цель взаимного исключения та же? - person overexchange   schedule 02.12.2017