я собирался через статью о неблокируемому CAS и наткнулся на этот код:Неблокирующий CAS в Java действительно не блокирует?
public class SimulatedCAS {
private int value;
public synchronized int getValue() {
return value;
}
public synchronized int compareAndSwap(int expectedValue, int newValue) {
int oldValue = value;
if (value == expectedValue)
value = newValue;
return oldValue;
}
}
Как эта операция CAS неблокирующая, если он использует синхронизацию?
Если мы имеем в виду, что клиент этого SimulatedCAS
не должен реализовывать собственную синхронизацию, то разве мы просто не переместили блокировку вместо ее устранения?
Как это «не блокирует»? Оба метода «синхронизированы», что означает, что два вызова не могут выполняться одновременно. –
Можете ли вы разместить ссылку на статью? –
Исходный источник кажется «Java Concurrency In Practice», стр. 322 (15.2.1) – kryger