Java并发编程—并发流程控制与AQS原理及相关源码解析
2020/2/24 17:02:46
本文主要是介绍Java并发编程—并发流程控制与AQS原理及相关源码解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java并发编程
代码GitHub地址 github.com/imyiren/con…
- 刨根问底搞懂创建线程到底有几种方法?
- 如何正确得启动和停止一个线程 最佳实践与源码分析
- 多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
- 了解线程属性,如何处理子线程异常
- 多线程安全和性能问题
- JMM(Java内存模型)在并发中的原理与应用
- 深入理解死锁问题及其解决方案
- 剖析线程池的使用与组成
- 带你一文搞懂ThreadLocal的用法以及内部原理
- J.U.C下Lock的分类及特点详解(结合案例和源码)
- J.U.C下各种Atomic类使用及CAS相关源码分析
- 结合源码分析ConcurrenthashMap与CopyOnWriteArrayList的原理
- 并发流程控制与AQS原理及相关源码解析
0. 主要内容
- 文章分为两部分:
- 第一个部分主要讲并发流程控制的各大类的使用及案例
- 第二部分主要是先将AQS的组成及原理,然后结合CountDownLatch、Semaphore等分析源码逻辑
ps: 文章内容比较多
1. 并发流程控制
1.1 什么是并发流程控制
- 并发流程控制,就是让线程之间相互配合完成任务,来满足业务逻辑
- 如:让线程A等待线程B完成后再执行等策略
1.2 并发流程控制的工具
类 | 作用 | 说明 |
---|---|---|
Semaphore | 信号量:可以通过控制“许可”的数量,来保证线程间配合 | 线程只有拿到了许可才可以继续运行 |
CyclicBarrier | 循环栅栏:线程会等待,直到足够多线程达到了规定数量,再执行下一步任务 | 适用于线程间相互等待处理结果就绪的场景 |
Phaser | 和CyclicBarrier类似,但是计数可变 | java7加入的新类 |
CountDownLatch | 也是一个计数等待相关,数量地见到0时,触发动作 | 不可重复使用 |
Exchanger | 让两个线程在合适时交换对象 | 适用于两个线程工作在同一个类的不同实例上时,用于交换数据 |
Condition | 可以控制线程的等待和唤醒 | 是Object.wati()的升级版 |
2. CountDownLatch
计数门闩
2.1 作用
- 并发流程控制的工具,用于等待数量(我们设定的)足够后再执行某些任务
2.2 主要方法
CountDownLatch(int count)
:只有一个构造方法,参数count为需要倒数的值await()
:调用此方法的线程会被挂起,它会等到count值为零的时候才继续执行countdown()
:讲count减1,直到0,等待的线程会被唤醒
2.3 用法一:等待线程执行完毕
/** * @author yiren */ public class CountDownLatchExample01 { public static void main(String[] args) throws InterruptedException { AtomicInteger integer = new AtomicInteger(1); CountDownLatch latch = new CountDownLatch(5); ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < 5; i++) { executorService.execute(() -> { try { System.out.println(Thread.current
这篇关于Java并发编程—并发流程控制与AQS原理及相关源码解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南