Java并发编程实战

目录

第一章 简介

第一部分 基础知识

重点章节:基础构建模块

包括:

同步容器:Vector和HashTable

并发容器:ConcurrentHashMap和CopyOnWriteArrayList等

阻塞队列与 生产者消费者模式

阻塞方法和中断方法

同步工具类:闭锁,FutureTask,信号量,栅栏

第二部分 结构化并发应用程序

介绍Task Executor 和 ThreadPoolExecutor。

Executor框架将任务的提交与任务的执行策略 解耦。

介绍了 任务的取消与JVM关闭

第三部分 活跃性、性能与测试

介绍死锁(锁顺序死锁、协作对象之间的死锁)、死锁避免与诊断、饥饿、活锁等。

Amdahl(阿姆达尔定律):描述的是,在增加计算资源的情况下,程序在理论上能够被实现最高加速比,取决于程序中可并行组件与串行组件所占比重。

所以,需要减少锁的竞争(缩小锁的范围(集中代码块)、减小锁的粒度(多个锁保护、锁分段))

第四部分 高级主题(本书重点)

显式锁 : Lock / ReentrantLock 结合Java源码,了解AQS/SYNC/CAS语义等。

15章原子变量与非阻塞同步机制,讲述如何运用CAS,在不阻塞的情形下,完成同步。厘清CAS与阻塞同步之间的关系,适用的场景。

了解,CAS在非激烈竞争情况下的性能优势(不会引起上下文切换的开销)

16章内存模型(JMM),需要了解Happens-before与重排序的关系,认识到:

Happens-before中的程序操作规则:“如果程序中操作A在操作B之前,那么在线程中A操作将在B操作之前执行”。

“Each action in a thread happens-before every action in that thread that comes later in the program order” is trying to say is, “In a single thread, your program will runas ifit was executed in the exact order you wrote it. We might change the ordering behind the scene but we make sure that none of that would change the output.

重点在于单线程中,所见的结果不会有差别。

掌握延长初始化占位类模式,如下

publicclassResourceFactory{

privatestaticResourceHolder {

publicstaticResource resource =newResource();

}

publicstaticResourcegetResource(){

returnResourceHolder.resource;

}

}

了解Java提供的同步工具的灵活性与简便性

Object.wait()/notify()/notifyAll()

Condition.await()/signal()

synchronized

Lock