《Java 并发编程的艺术》个人总结

《Java 并发编程的艺术》个人总结 为什么读这本书 工作中写并发代码的机会不少——线程池、缓存、异步处理——但遇到诡异的可见性问题或死锁时,往往只能靠加 synchronized 碰运气。这本书系统地梳理了 Java 内存模型和并发工具的设计原理,读完确实对调试并发问题有了更清晰的思路。 核心知识点梳理 1. 并发编程的挑战 书中开篇说的三个核心问题: 上下文切换:线程多了,CPU 花在切换上的时间比干活还多 死锁:互相等对方的锁 资源限制:硬件瓶颈不解决,加再多线程也没用 经验上,线程数 ≈ CPU 核数 × 2(取决于 IO 密集还是计算密集) 是一个比较可靠的起点。 2. Java 内存模型(JMM) 这是全书最重要的一章。JMM 控制的是一个线程对共享变量的写入何时对另一个线程可见。核心概念: happens-before 规则:程序顺序、volatile、锁、传递性等 volatile:保证可见性和禁止指令重排序,但不保证原子性 锁:synchronized 和 ReentrantLock 同时保证原子性和可见性 并发编程中大部分诡异 bug 的根因都是对 JMM 的理解不到位——以为一个线程写完了另一个线程就一定能读到。 3. 并发基础组件 组件 核心作用 使用场景 volatile 轻量级可见性保证 状态标识位 synchronized 互斥 + 可见性 临界区保护 ReentrantLock 可中断/超时/公平锁 需要灵活锁控制的场景 AtomicInteger/Long/Reference CAS 无锁原子操作 计数器、状态机 CountDownLatch 等待多个线程完成 并行任务汇总 CyclicBarrier 多个线程互相等待 分阶段并行计算 Semaphore 流量控制 限流、资源池 4. 线程池 ThreadPoolExecutor 的核心参数关系: ...

2024年3月23日 · CoderAmedal