1

你们认为这是一个很好的原子操作通用框架吗?您还认为关于 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();

它实际上是一个比较和执行框架,所以在检查原始捕捉值没有改变之后,我们执行一些代码块。

4

2 回答 2

8

java.util.concurrent.AtomicReference除非您真的需要完整的相等性检查而不是简单的==.

compareAndSet返回一个值,说明该值是否为预期值,因此您可以有条件地执行其他代码。

在同步块中执行抽象方法听起来像是一项有潜在风险的业务 - 没有迹象或限制可能需要多长时间。

这么说吧:我认为除非我知道使用您提出的框架之类的特定java.util.concurrent.atomic要求,否则我会坚持使用.

于 2013-02-08T11:08:21.910 回答
1

你们认为这是一个很好的原子操作通用框架吗?

是的,它在java.util.concurrent.atomic包中。

如果“if else”有一个单字节代码,那么这个“if else”指令将是原子的吗?

不一定——一个字节码指令可能会转换成不止一个机器指令。

注意:您的代码使用了一个同步块,该块永远不会在一次调用中释放 - 因此,如果在进入块时条件为假,它可能永远不会变为真。

于 2013-02-08T11:10:17.020 回答