前言
对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心,就会写出非线程安全的代码。正因此,多线程编程一直是一个被广泛而深入讨论的领域。在JDK 1.5发布之前,Java只在语言级别上提供一些简单的线程互斥与同步机制,也就是synchronized关键字、wait与notify。如果遇到复杂的多线程编程场景,就需要开发者基于这些简单的机制解决复杂的线程同步问题。而从JDK 1.5开始,并发编程大师Doug Lea奉上了一个系统而全面的并发编程框架——JDK Concurrent包,里面包含了各种原子操作、线程安全的容器、线程池和异步编程等内容。
不多bb,我们直接上内容!
由于篇幅限制,这份文档一共有384页,没办法全部为大家展示出来,还望见谅
多线程基础
线程的优雅关闭
stop ( )与destory ()函数
守护线程
设置关闭的标志位
synchronized关键字
锁的对象是什么
锁的本质是什么
synchronized实现原理
wait()与notify()
生产者-消费者模型
为什么必须和synchronized一起使用
为什么wait ()的时候必须释放锁
wait () 与notify ()的问题
volatile关键字
64位写入的原子性(Half Write)
内存可见性
重排序:DCL问题
综合应用:无锁编程
一写一读的无锁队列:内存屏障
一写多读的无锁队列:volatile关键字
多写多读的无锁队列:CAS
无锁栈
无锁链表
Atomic类
Lock与Condition
互斥锁
读写锁
Condition
StampedLock
同步工具类
并发容器
BlockingQueue
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQuueue
DelayQueue
SynchronousQueue
BlockingDeque
CopyOnWrite
CopyOnWriteArrayList
CopyOnWriteArraySet
CncrertinkedQueue/Deque
CorcurrentHashMap
JDK 7中的实现方式
JDK 8中的实现方式
CnucrenskiplistMap/Set
ConcurrentSkipListMap
ConcurrentSkipListSet
线程池与Future
线程池的实现原理
线程池的类继承体系
ThreadPoolExector
核心数据结构
核心配置参数解释
线程池的优雅关闭
任务的提交过程分析
任务的执行过程分析
线程池的4种拒绝策略
Callable与Future
ScheduledThreadPoolExecutor
Executors工具类
ForkJoinPool
ForkJoinPool用法
工作窃取队列
工作窃取算法:任务的执行过程分析
顺序锁eqLock
scanGuard解析
CompletableFuture
CompletableFuture内部原理
CompletableFuture的构造:ForkJoinPool
任务类型的适配
任务的链式执行过程分析
thenApply与thenApplyAsync的区别
任务的网状执行:有向无环图
写在最后
并发除了要考虑静态资源、死锁、资源公平性等问题,往往还需要考虑性能问题,在一些业务场景往往还会比较复杂,这些都给java coder们造成了不小的难题。如果你对concurrent包有一定理解就能解决了不少问题。