4 实战解析多线程并发包

felix.shao2025-02-16

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 高并发与编程实战]
Last Updated 2/16/2025, 4:13:06 PM