0

我查看了 ReentrantLock 的 Java API,我可以看到synchronized关键字没有使用同步。是否在 AbstractQueuedSynchronizer 中的以下方法中(ReentrantLock 在尝试获取锁时引用)同步对象?由于compareAndSwapInt是本机方法,是否在本机级别/代码进行同步?

protected final boolean compareAndSetState(int expect, int update) {
    // See below for intrinsics setup to support this
    return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
4

2 回答 2

3

每个 JDK 的实现可能会有所不同。例如,Sun(现在的 Oracle)实现是通过sun.misc.Unsafe( http://www.docjar.com/docs/api/sun/misc/Unsafe.html )

我曾经写过关于不安全的 Java 并发性的博客:)

于 2012-04-27T13:57:01.550 回答
1

您是对的:在 Oracle 的 JDK 中,ReentrantLock是根据本机比较和交换原语(加上相当数量的 Java 代码)实现的,而不是根据synchronized关键字实现的。

于 2012-04-27T13:56:53.393 回答