Java ReentrantLock如何同步?
我已经看过了用于ReentrantLock的JavaAPI,我可以看到,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
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
()
我曾经在博客上写到:)