多线程-ReentrantLock(可重入锁)与synchronized比较

可重入锁新特征:

  • 可中断响应;
  • 锁限时操作;
  • 公平锁;
  • 非公平锁;
  • 结合Condition使用;

继承关系:

多线程-ReentrantLock(可重入锁)与synchronized比较_第1张图片
Lock定义了锁的接口规范。
ReentrantLock实现了Lock接口。
AbstractQueuedSynchronizer中以队列的形式实现线程之间的同步。
ReentrantLock的方法都依赖于AbstractQueuedSynchronizer的实现。
sync是在ReentrantLock的构造函数中实现的,其中fair参数的不同可实现公平性锁和非公平性锁。由于在锁释放的阶段,锁处于无线程占有的状态,此时其它线程和在队列中等待的线程都可以抢占改锁,从而出现公平性锁和非公平锁的区别。

ReentrantLock是如何实现锁资源的。

ReentrantLock的锁资源以state状态描述,利用CAS则实现对锁资源的抢占,并通过一个CLH队列阻塞所有的竞争线程,在后续则逐个唤醒等待中的竞争线程。ReentrantLock继承AQS(AbstractQueueSynchronizer的缩写)完全从代码层面实现了java的同步机制,相对于synchronized,更容易实现对各类锁的扩展。同时,AQS中的Condition配合ReentrantLock使用,实现了线程间通信(wait/notify)的功能。

中断响应:

你可能感兴趣的:(笔记,杂谈,多线程)