【发布时间】:2014-02-22 18:54:06
【问题描述】:
我已经阅读了有关使用 Java 使用处理器的 CAS 指令的可能性。
当我搜索示例时,我只找到了诸如 SimulatedCAS。 这个类显然只是对 CAS 的模拟(顾名思义......),在它的类方法上使用了常见的“同步”。
所以我想知道,如何才能真正使用 Java 中的 CAS 指令?
【问题讨论】:
标签: java multithreading optimization concurrency processor
我已经阅读了有关使用 Java 使用处理器的 CAS 指令的可能性。
当我搜索示例时,我只找到了诸如 SimulatedCAS。 这个类显然只是对 CAS 的模拟(顾名思义......),在它的类方法上使用了常见的“同步”。
所以我想知道,如何才能真正使用 Java 中的 CAS 指令?
【问题讨论】:
标签: java multithreading optimization concurrency processor
查看AtomicBoolean 和AtomicReference 等类。它们是做你想做的事情的抽象,但实际上并不在 CPU 上。
我使用的一种模式是线程安全的状态保持。
private final AtomicBoolean isClosed = new AtomicBoolean(false);
...
public void close() {
if (this.isClosed.compareAndSet(false, true) {
....
}
}
【讨论】:
AtomicBoolean.compareAndSet 具有通过JVM(至少是热点)的快速路径(“内在”),因此它们可以快速归结为特定于硬件的指令。例如,在 x86 上,它最终发出 cmpxchg 系列指令之一。