Lock体系是JDK1.5增加的,它访问共享资源的访问机制与内建锁完全不同!
它没有内建锁隐式的加锁与释放锁,它增加了可中断获取锁及超时响应机制获取锁的特性,这些特性是内建锁完全不具备的!
AQS:是Lock体系核心的存在,是构建锁与其他同步器件的基础框架,是由一个int整型表示其同步状态及FIFO队列组成,一般使用AQS都会创建一个静态内部类继承AQS。
Lock–>面向使用者,定义了使用者与锁的接口,隐藏了实现细节
AQS–>面向实现者,对使用者屏蔽了同步状态的管理,线程的排队,等待,唤醒等机制;
Lock体系可以有多个等待队列,而内建锁只有一个等待队列;
等待队列:调用wait()方法被阻塞的线程
同步队列:获取锁失败的线程进入同步队列,Lock体系的同步队列是由一个带有头尾指针的双向链表组成,是把线程封装成一个Node节点放在链表中;
Lock接口的API
1.void lock();
2.boolean tryLock();//获取锁成功返回true,否则返回false
3.boolean tryLock(long,TimeUnit)// 超时等待获取锁,在二的基础上进行重载
4.void lockInterruptibly() throws InterruptedException;获取锁的过程中可以响应中断
5.void unLock()//解锁
Lock接口的常用实现子类
1.ReentrantLock //可重入锁
2.ReentrantReadWriteLock //可重入读写锁
AQS中的protected方法-需要被子类覆写