繁体   English   中英

ReentrantLock如何同步?

[英]How does ReentrantLock synchronize?

我已经查看了ReentrantLock的Java API,并且看到的是没有使用synchronized关键字进行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);
}

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

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

您是正确的:在Oracle的JDK中, ReentrantLock是根据本机比较和交换原语(在其之上加上大量Java代码)实现的,而不是通过synchronized关键字实现的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM