3 Java线程同步机制
3.1 线程同步机制简介
3.2 锁概述
3.2.1 锁的作用
3.2.2 与锁相关的几个概念
3.2.3 锁的开销及其可能导致的问题
3.3 内部锁:synchronized关键字
3.4 显式锁:Lock接口
3.4.1 显式锁的调度
3.4.2 显式锁与内部锁的比较
3.4.3 内部锁还是显式锁:锁的选用
*3.4.4 改进型锁:读写锁
3.5 锁的适用场景
3.6 线程同步机制的底层助手:内存屏障
*3.7 锁与重排序
3.8 轻量级同步机制:volatile关键字
3.8.1 volatile的作用
3.8.2 volatile变量的开销
3.8.3 volatile的典型应用场景与实战案例
3.9 实践:正确实现看似简单的单例模式
3.10 CAS与原子变量
3.10.1 CAS
3.10.2 原子操作工具:原子变量类
3.11 对象的发布与逸出
3.11.1 对象的初始化安全:重访final与static
3.11.2 安全发布与逸出
3.12 本章小结
5 线程间协作
5.1 等待与通知:wait/notify
5.1.1 wait/notify的作用与用法
5.1.2 wait/notify的开销及问题
5.1.3 Object.notify()/notifyAll()的选用
*5.1.4 wait/notify与Thread.join()
5.2 Java条件变量
5.3 倒计时协调器:CountDownLatch
5.4 栅栏(CyclicBarrier)
CyclicBarrier的典型应用场景
5.5 生产者—消费者模式
5.5.1 阻塞队列
5.5.2 限购:流量控制与信号量(Semaphore)
*5.5.3 管道:线程间的直接输出与输入
5.5.4 一手交钱,一手交货:双缓冲与Exchanger
5.5.5 一个还是一批:产品的粒度
5.5.6 再探线程与任务之间的关系
5.6 对不起,打扰一下:线程中断机制
InterruptedException异常处理及中断响应
5.7 线程停止:看似简单,实则不然
5.7.1 生产者—消费者模式中的线程停止
5.7.2 实践:Web应用中的线程停止
5.8 本章小结
9 Java异步编程
9.1 同步计算与异步计算
9.2 Java Executor框架
9.2.1 实用工具类Executors
9.2.2 异步任务的批量执行:CompletionService
9.3 异步计算助手:FutureTask
9.3.1 实践:实现XML文档的异步解析
9.3.2 可重复执行的异步任务
9.4 计划任务
9.5 本章小结
10 Java多线程程序的调试与测试
10.1 多线程程序的调试技巧
10.1.1 使用监视点
10.1.2 设置暂挂策略
10.2 多线程程序的测试
10.2.1 可测试性
10.2.2 静态检查工具:FindBugs
10.2.3 多线程程序的代码复审
10.2.4 多线程程序的单元测试:JCStress
10.3 本章小结