【问题标题】:How does ReentrantLock synchronize?ReentrantLock 如何同步?
【发布时间】:2012-04-27 13:51:33
【问题描述】:

我查看了 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);
}

【问题讨论】:

    标签: java multithreading synchronization reentrantlock


    【解决方案1】:

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

    我曾经在博客上写过Java concurrency in unsafe :)

    【讨论】:

      【解决方案2】:

      您是对的:在 Oracle 的 JDK 中,ReentrantLock 是根据本机 compare-and-swap 原语(加上相当数量的 Java 代码)实现的,而不是根据 synchronized 关键字实现的.

      【讨论】:

        猜你喜欢
        • 2011-12-29
        • 2018-04-17
        • 2016-02-15
        • 1970-01-01
        • 1970-01-01
        • 2015-07-25
        • 2011-07-01
        • 1970-01-01
        相关资源
        最近更新 更多