- 畅销套餐
- 精选套餐
- 人气套餐
- 尊享套餐
- 高薪套餐
- 课程介绍
- 课程大纲
适合人群:
具有JAVA和并发编程基础的同学
你将会学到:
从代码层次讲解JUC高并发包及AQS框架中各个子类的实现和设计思想
课程简介:
什么是AQS
一套JAVA并发的库,位于java.util.concurent包下。
AQS=abstractqueuedsynchronizer 翻译就是 抽象排队的同步器, 抽象是因为该类是所有该系列锁的实质实现和基础,基于抽象模板设计模式
父类实现基础操作,子类利用该组基础API实现各种丰富的锁
具体AQS锁包括哪些
主要包括:ReentrantLock,CyclicBa nbrrier,CountDownLatch 等,都是通过代理基于继承AQS类的子类实现。
AQS 如何实现,为什么需要AQS
AQS是用于高并发场景,普通并发使用CAS方式就可以实现,单纯采用CAS方式的锁叫做自旋锁,自旋锁其实就是死循环,多个线程在一段死循环中尝试获取锁,
随着并发量升高,线程个数增加,如果仍然都在死循环中竞争锁会导致CPU的浪费,常规的解决办法就是增加队列,让线程排队通过临界区,将排队的线程暂停
AQS提供两个队列 运行队列和条件队列
运行队列是基本队列,条件队列比较灵活用于实现更加复杂的锁应用,如CyclicBarrier,CountDownLatch 等,主要用于控制基于条件变化触发线程在两个队列之间的转移。其中条件队列一般只用于存放等待信号的线程,不会被执行,事件触发后才将该队列中的节点转移到运行队列中进行执行。
ReentrantLock 包括公平锁和非公平锁两种模式,差别就在于新的到达临界区的线程第一次获取锁的时候能否不排队进行一次锁竞争,公平锁是绝对的FIFO,非公平锁的区别仅仅是第一次获取锁时候可以跳过排队环节进行一次锁获取,如果获取成功则执行临界代码,否则获取锁失败后和公平锁剩余的逻辑完全一样
ThreadLocal 类其实是个工具类,该类的对象可以通过捕获当前线程,并在线程的
nullnull
两个预留位置上放置HASHMAP 来存取或者更新一个对象,来实现将信息放置在线程对象的内部。
该类和线程是多对多的关系,多个该类的对象可以操作同一个线程的HASHMAP,每个对象也可以操作多个线程的HASHMAP,该HASHMAP通过线性探测法实现,具体信息详见第二章第1节
课程大纲-AQS 高并发框架源码讲解
第1章AQS 框架简介(48分钟3节)
第2章juc.locks lock三剑客之核心源码全解析(2小时46分钟4节)