美文网首页
juc-locks框架之ReentrantLock

juc-locks框架之ReentrantLock

作者: hehehehe | 来源:发表于2020-11-17 09:45 被阅读0次
一、ReentrantLock类简介

ReentrantLock类,实现了Lock接口,是一种可重入独占锁,它具有与使用 synchronized 相同的一些基本行为和语义,但功能更强大。ReentrantLock内部通过内部类实现了AQS框架(AbstractQueuedSynchronizer)的API来实现独占锁的功能。

image.png
构造声明
image.png

ReentrantLock类的其中一个构造器提供了指定公平策略 / 非公平策略的功能,默认为非公平策略。
因此,当线程持有锁的时间相对较长或者线程请求锁的平均时间间隔较长时,可以考虑使用公平策略。此时线程调度产生的耗时间隔影响会较小。

公平策略:在多个线程争用锁的情况下,公平策略倾向于将访问权授予等待时间最长的线程。也就是说,相当于有一个线程等待队列,先进入等待队列的线程后续会先获得锁,这样按照“先来后到”的原则,对于每一个等待线程都是公平的。
非公平策略:在多个线程争用锁的情况下,能够最终获得锁的线程是随机的(由底层OS调度)。

class X {
    private final ReentrantLock lock = new ReentrantLock();
    // ...
    public void m() {
        lock.lock(); // block until condition holds
        try {
            // ... method body
        } finally {
            lock.unlock();
        }
    }
}

ReentrantLock的源码非常简单,它通过内部类实现了AQS框架,Lock接口的实现仅仅是对AQS的api的简单封装,

相关文章

网友评论

      本文标题:juc-locks框架之ReentrantLock

      本文链接:https://www.haomeiwen.com/subject/wyvzbktx.html