Lock体系及深入里理解AQS

本文探讨了JDK1.5引入的Lock体系,与内建锁的区别在于其可中断获取锁和超时响应机制。AQS作为核心组件,用于构建锁和其他同步器件,由同步状态和FIFO队列构成。Lock接口提供了使用者与锁的交互,而AQS面向实现者,管理同步状态和线程操作。Lock实现通常通过继承AQS并覆盖protected方法。以ReentrantLock为例,lock方法调用sync.lock(),在acquire()方法中进行节点添加、同步队列管理和状态获取。释放锁的过程也是关键部分。
摘要由CSDN通过智能技术生成

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方法-需要被子类覆写


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值