02.并发编程的三个核心问题
总结
- 并发问题归结为三类:分工(性能)、同步(性能)、互斥(正确性)
- 互斥靠锁解决,同步靠等待-通知机制,分工靠线程池/Fork-Join/CompletableFuture
- 三者共同构成 Java 并发编程的核心模型
1. 三类问题是什么?
- 分工:怎么高效拆解任务分配给线程,解决的是性能问题
- 同步:线程间怎么协作,条件不满足时等待,满足时唤醒,也是性能问题
- 互斥:同一时刻只允许一个线程访问共享资源,解决的是正确性问题
2. 对应的解决方案
| 问题 | 根源 | 解决方案 |
|---|---|---|
| 互斥 | 可见性、有序性、原子性 | 锁(synchronized / Lock) |
| 同步 | 线程协作 | 等待-通知(wait/notify / Condition),底层模型见 07.管程Monitor |
| 分工 | 任务拆解 | 线程池、Fork/Join、CompletableFuture,详见 09.并发工具类 |