你们认为这是一个很好的原子操作通用框架吗? 您还认为关于 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();
它实际上是一个比较和执行框架,所以在检查原始捕捉值没有改变之后我们执行一些代码块。
最佳答案
我只会使用 java.util.concurrent.AtomicReference
除非您真的需要完整的相等性检查而不是简单的==
。
compareAndSet
返回一个值,说明该值是否为预期值,因此您可以有条件地执行其他代码。
在同步块(synchronized block)中执行抽象方法听起来像是一项具有潜在风险的业务 - 没有指示或限制可能需要多长时间。
这样说:我认为,除非我知道特定要求使用类似于您提议的框架的东西,否则我会坚持使用 java.util.concurrent 中的类型。原子的
。
关于Java Atomicity & 一个好的比较和交换框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771174/