Java Atomicity & 一个好的比较和交换框架?

标签 java bytecode atomic

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

相关文章:

Java Swing 计算器

java - Java 注解的默认值是否被编译成字节码?

Java字节码操作 'invokevirtual' Object继承的方法不保持一致性

java - 为什么在 Java 字节码中跳转而不是返回?

linux - rename() 是原子的吗?

java - 如何方便地对 CompleteableFuture<BigDecimal> 的 Stream 求和?

Java-ScheduledExecutorService : Execute task at termination

c - 原子地覆盖指针

Java:没有 AtomicFloat 或 AtomicDouble 吗?

java - 表列名称 - NetBeans IDE