ReentrantLock 与 AQS 源码分析

ReentrantLock 与 AQS 源码分析 1. 基本结构

   重入锁 ReetrantLock,JDK 1.5新增的类,作用与synchronized关键字相当,但比synchronized更加灵活。ReetrantLock本身也是一种支持重进入的锁,即该锁可以支持一个线程对资源重复加锁,但是加锁多少次,就必须解锁多少次,这样才可以成功释放锁。

1. 继承

没有继承任何类,因为很多操作都使用了组合完成。

2. 实现

Lock, java.io.Serializable
  这里着重介绍一下 Lock 接口,接口定义了几个必要的方法,也是在 ReentrantLock 中的重点需要分析的方法。
   三类方法:获取锁、释放锁、获取条件。

public interface Lock { // 阻塞获取锁,如果获取不到锁就一直等待 void lock(); // 可中断获取锁,在获取锁的过程可以被中断,但是 Synchronized 是不可以 void lockInterruptibly() throws InterruptedException; // 非阻塞获取锁,没有获取到锁立即返回 boolean tryLock(); // 超时获取锁,没获取到锁等待一段时间 boolean tryLock(long time, TimeUnit unit) throws InterruptedException; // 解锁 void unlock(); // 等待唤醒机制的条件 Condition newCondition(); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssszz.html