Как вы, ребята, думаете, это хорошая общая структура для атомарных операций? Кроме того, как вы думаете, правильно ли говорить, что в отношении приложений Java отдельные байтовые коды являются атомарными, поскольку нет возможности выполнять более одного байтового кода за раз с помощью одной JVM? Итак, если бы был однобайтовый код для if else, то эта инструкция if else была бы атомарной?
// CAS, Compare and Swap
public abstract class CASOperation<T> {
protected T valueAtStart;
public CASOperation(){
valueAtStart = objectToReview();
}
public void exec(){
synchronized(this){
while(!valueAtStartEqualsTheCurrent()){
valueAtStart = objectToReview();
}
execImp();
}
}
private boolean valueAtStartEqualsTheCurrent() {
if (objectToReview().equals(valueAtStart)){
return true;
} else {
return false;
}
}
abstract protected T objectToReview();
abstract protected void execImp();
На самом деле он предназначен для сравнения и выполнения, поэтому после проверки того, что исходное значение привязки не изменилось, мы выполняем некоторый блок кода.