0

我正在研究java.util.concurrent.locks.AbstractQueuedSynchronizer源代码。

从多个地方调用compareAndSetState方法。

/**
 * Atomically sets synchronization state to the given updated
 * value if the current state value equals the expected value.
 * This operation has memory semantics of a {@code volatile} read
 * and write.
 *
 * @param expect the expected value
 * @param update the new value
 * @return {@code true} if successful. False return indicates that the actual
 *         value was not equal to the expected value.
 */
protected final boolean compareAndSetState(int expect, int update) {
    // See below for intrinsics setup to support this
    return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}

参数 expectupdate是显而易见的,并且对应于原子参数。但是this是对象(而不是int)。
这与期望相比如何?

4

1 回答 1

1

这是其字段state将被 CAS 编辑的实例。该值存储在该字段中。实例偏移量对是一种将字段描述符转换为内存地址的方法,就像使用Field::set,Field::get或时需要提供实例一样Method::invoke

顺便说一句,这些 sun 类的源代码可在openjdk 的水银存储库中在线获得。

于 2017-03-14T11:52:08.470 回答