Java并发原语-比较和交换

Java并发原语-比较和交换,java,Java,Java 5引入了一些并发原语,如比较和交换、比较和设置(一起被称为CA)以及其他一些原语。 据我所知,所有这些行动都保证是原子的。因此,对于这些操作中的每一个,似乎都必须有一条JVM字节码指令 我正在浏览字节码指令列表,但没有找到CAS等方法的任何指令 不确定,我说CAS必须有一个单字节代码指令是正确的,或者CAS机构在java中执行/实现的方式是否不同 因此,对于这些操作中的每一个,似乎都必须有一条JVM字节码指令 事实上,这些操作是作为本机代码方法实现的,它们使用特定于硬件的指令或指令序列

Java 5引入了一些并发原语,如比较和交换、比较和设置(一起被称为CA)以及其他一些原语。
据我所知,所有这些行动都保证是原子的。因此,对于这些操作中的每一个,似乎都必须有一条JVM字节码指令

我正在浏览字节码指令列表,但没有找到CAS等方法的任何指令

不确定,我说CAS必须有一个单字节代码指令是正确的,或者CAS机构在java中执行/实现的方式是否不同

因此,对于这些操作中的每一个,似乎都必须有一条JVM字节码指令

事实上,这些操作是作为本机代码方法实现的,它们使用特定于硬件的指令或指令序列来实现所需的语义。没有用于执行CAS操作的JVM字节码

因此,对于这些操作中的每一个,似乎都必须有一条JVM字节码指令


事实上,这些操作是作为本机代码方法实现的,它们使用特定于硬件的指令或指令序列来实现所需的语义。没有用于执行CAS操作的JVM字节码。

来自Java CAS的操作看起来像是对类
sun.misc.Unsafe
对象的本机方法调用。
AtomicInteger
中的一个示例:

/**
 * Atomically sets the value to the given updated value
 * if the current value {@code ==} the expected value.
 *
 * @param expect the expected value
 * @param update the new value
 * @return true if successful. False return indicates that
 * the actual value was not equal to the expected value.
 */
public final boolean compareAndSet(int expect, int update) {
    return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

关于不安全的更多信息:.

来自Java CAS的操作看起来像是对类
sun.misc.Unsafe
的对象的本机方法调用。
AtomicInteger
中的一个示例:

/**
 * Atomically sets the value to the given updated value
 * if the current value {@code ==} the expected value.
 *
 * @param expect the expected value
 * @param update the new value
 * @return true if successful. False return indicates that
 * the actual value was not equal to the expected value.
 */
public final boolean compareAndSet(int expect, int update) {
    return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

关于不安全的更多信息:。

这给我带来了另一个问题(也许我应该将此添加到标题问题中)-为什么java在java 1.5之前为了并发性而忽略此CAS操作,而CAS指令从早期起就由处理器支持,大约在1970年。@aknon-这不是一个我们可以回答的问题。这给我带来了另一个问题(也许我应该在标题问题中添加这个问题)-为什么java在java 1.5之前忽略了这个CAS操作以实现并发性,而CAS指令从很早的时候起就受到处理器的支持,大约1970年。@aknon-这不是我们能回答的问题。