4 实战解析多线程并发包
4 实战解析多线程并发包
1 概述
本章讲解 JUC 中常用工具类的核心语法,并通过具体案例演示每个工具类的实际使用场景。
2 JUC 核心类的深度解析与使用案例
本节将详细地介绍 JUC 包中的 CopyOnWrite、ReadWriteLock、ConcurrentHashMap、BlockingQueue 和 CountDownLatch 等常用并发工具类。
2.1 使用 CopyOnWrite 实现并发写操作
- 范例 1 代码(并发读写)
com.bltj.ch04.TestCopyOnWriteArrayList
。会抛出ConcurrentModificationException
异常。
2.2 使用 ReadWriteLock 实现读写锁
- 范例 2 代码(读写锁)
com.bltj.ch04.ReentrantReadWriteLock
。读锁是共享锁,写锁是独占锁,及加了写锁的资源,不能再被其他线程读或写。
2.3 ConcorrentHashMap 的底层结构与演进原理
略,详见 ConcorrentHashMap
小节。
- 范例 3 代码(ConcorrentHashMap 使用方式)
com.bltj.ch04.TestConcurrentHashMap
。
2.4 使用 BlockingQueue 实现排序和定时任务
- 范例 4 代码(优先级阻塞队列)
com.bltj.ch04.TestPriorityBlockingQueue
。 - 范例 5 代码(延迟阻塞队列)
com.yjll.ch04.swim.TestNatatorium
。
2.5 通过 CountDownLath 实现多线程闭锁
- 范例 6 代码(线程闭锁)
com.yjll.ch04.TestCountDownLatch
。实现当 A 和 B 全部执行完毕后,C 再去执行。
2.6 通过 CyclicBarrier 在多线程中设置屏障
- 范例 7 代码(线程屏障)
com.yjll.ch04.TestCyclicBarrier
。实现当 A、B 等到 C 就绪后,A、B、C 三者再同时去执行。
2.7 使用 FutureTask 和 Callable 实现多线程
- 范例 8 代码(多线程求和)
com.yjll.ch04.TestCallable
。
3 通过源码掌握并发包的基石
略。
3.1 AQS 原理解析
略。
3.2 AQS 源码解读
略。
3.3 独占模式源码解读
略。
4 实战线程池
4.1 5 种类型线程池的创建方式
略。
4.2 常用线程池的应用示例与解析
- 范例 9 代码(线程池基础应用)
com.yjll.ch04.TestThreadPoolWithRunable
。 - 范例 10 代码(固定数量的线程池)
com.yjll.ch04.TestThreadPoolWithCallable
。 - 范例 11 代码(线程池的流程控制)
com.yjll.ch04.myexecutor.TestPool
。
4.3 自定义线程池的构建原理与案例详解
- 范例 12 代码(自定义线程池)
com.yjll.ch04.policy.TestMyThreadPool
。 - 范例 13 代码(自定义拒绝策略)
com.yjll.ch04.policy.TestMyThreadPool
。
TIP
思考 1:为什么使用自定义线程池?
思考 2:默认居家策略以及自定义拒绝策略实现逻辑。
5 通过 CompletableFuture 控制线程间依赖关系的案例解析
- 范例 14 代码(线程间的依赖顺序)
com.yjll.ch04.CompletableFutureDemo
。
6 异步模型和事件驱动模型
略。
参考文献
- [亿级流量 Java 高并发与编程实战]