从65节到82节,我们用了18篇文章讨论并发,本节进行简要总结。
多线程开发有两个核心问题,一个是竞争,另一个是协作。竞争会出现线程安全问题,所以,本节首先总结线程安全的机制,然后是协作的机制。管理竞争和协作是复杂的,所以Java提供了更高层次的服务,比如并发容器类和异步任务执行服务,我们也会进行总结。本节纲要如下:
线程安全的机制
线程的协作机制
容器类
任务执行服务
线程安全的机制
线程表示一条单独的执行流,每个线程有自己的执行计数器,有自己的栈,但可以共享内存,共享内存是实现线程协作的基础,但共享内存有两个问题,竞态条件和内存可见性,之前章节探讨了解决这些问题的多种思路:
使用synchronized
使用显式锁
使用volatile
使用原子变量和CAS
写时复制
使用ThreadLocal