Java ReentrantLock如何同步?

Java ReentrantLock如何同步?,java,multithreading,synchronization,reentrantlock,Java,Multithreading,Synchronization,Reentrantlock,我已经看过了用于ReentrantLock的JavaAPI,我可以看到,synchronized关键字没有使用同步。是否在AbstractQueuedSynchronizer(ReentrantLock在尝试获取锁时引用)中的以下方法中同步了对象?由于compareAndSwapInt是本机方法,同步是否在本机级别/code进行 protected final boolean compareAndSetState(int expect, int update) { // See belo

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

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

你是正确的:在Oracle的JDK中,
ReentrantLock
是根据本机原语(加上相当数量的Java代码)实现的,而不是根据
synchronized
关键字实现的。

你是正确的:在Oracle的JDK中,
ReentrantLock
是根据本机原语实现的(加上它上面相当多的Java代码),而不是按照
synchronized
关键字。

每个JDK.Sun(现在的Oracle)实现的实现可能不同,例如,通过
Sun.misc.Unsafe()


我曾经在博客上写过:)

每个JDK的实现可能会有所不同。例如,Sun(现在的Oracle)实现是通过
Sun.misc.Unsafe
()

我曾经在博客上写到:)