【问题标题】:How can I use CAS (Compare-and-swap) in java?如何在 Java 中使用 CAS(比较和交换)?
【发布时间】:2014-02-22 18:54:06
【问题描述】:

我已经阅读了有关使用 Java 使用处理器的 CAS 指令的可能性。

当我搜索示例时,我只找到了诸如 SimulatedCAS。 这个类显然只是对 CAS 的模拟(顾名思义......),在它的类方法上使用了常见的“同步”。

所以我想知道,如何才能真正使用 Java 中的 CAS 指令?

【问题讨论】:

    标签: java multithreading optimization concurrency processor


    【解决方案1】:

    查看AtomicBooleanAtomicReference 等类。它们是做你想做的事情的抽象,但实际上并不在 CPU 上

    我使用的一种模式是线程安全的状态保持。

    private final AtomicBoolean isClosed = new AtomicBoolean(false);
    
    ...
    
    public void close() {
        if (this.isClosed.compareAndSet(false, true) {
            ....
        }
    }
    

    【讨论】:

    • 各种低级例程如AtomicBoolean.compareAndSet 具有通过JVM(至少是热点)的快速路径(“内在”),因此它们可以快速归结为特定于硬件的指令。例如,在 x86 上,它最终发出 cmpxchg 系列指令之一。
    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多