Java 并发知识地图
理解可见性、原子性、有序性,以及 Java 并发工具如何建立在这些规则之上。
并发问题的三个核心维度
可见性
一个线程修改的数据,何时能够被另一个线程观察到。volatile、锁和线程启动/终止规则都与 happens-before 有关。
原子性
一个操作能否被其他线程观察到中间状态。count++ 即使使用 volatile 也不是原子操作。
有序性
编译器和处理器可以在不改变单线程结果的前提下重排序。并发程序必须通过同步规则建立必要顺序。
知识路线
- Java 内存模型与 happens-before
volatile与内存屏障synchronized与对象监视器- CAS、原子类和 ABA 问题
- AQS、锁和同步器
- 线程池与任务调度
CompletableFuture与异步编排- 并发容器
生产实践原则
- 尽量减少共享可变状态。
- 明确线程池的职责、队列容量和拒绝策略。
- 不要把耗时不可控的任务提交到公共线程池。
- 监控活跃线程数、队列长度、拒绝次数和任务耗时。
评论与讨论
回复 :
留下你的想法