并发编程
并发编程可选择的方式有多进程、多线程和多协程。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去"fork" 出多个进程:也不像Go那样,在语言层面原生提供多协程。在Java中, 并发就是多线程模式。
对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心,就会写出非线程安全的代码。正因此,多线程编程一直是一个被广泛而深入讨论的领域。
在JDK 1. 5发布之前,Java只在语言级别上提供一些简单的线程互斥与同步机制,也就是synchronized关键字、wait 与notify.如果遇到复杂的多线程编程场景,就需要开发者基于这些简单的机制解决复杂的线程同步问题。而从JDK 1. 5开始,并发编程大师Doug Lea奉上了一个系统而全面的并发编程框架一JDK Concurrent包,里面包含了各种原子操作、线程安全的容器、线程池和异步编程等内容。
**下面要介绍的这份笔记就是基于JDK7和JDK8,对整个Concurrent包进行全面的源码剖析。**JDK8中大部分并发功能的实现和JDK7一样,但新增了一些额外特性。例如CompletableFuture. ConcurrentHashMap的新实现、 StampedLock. LongAdder等。
第1章 多线程基础
- 线程的优雅关闭
- InterruptedException ()函数与interrupt ()函数
- synchronized关键字
- wait () 与notify ()
- volatile关键字
- JMM与happen-before
- 内存屏障
- final关键字
- 综合应用:无锁编程
第2章 Atomic类
- AtomicInteger和AtomicLong
- AtomicBoolean和AtomicReference
- AtomicStampedReference和AtomicMarkableReference
- AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceFieldUpdater
- AtomicIntegerArray、AtomicLongArray和Atomic-ReferenceArray
- Striped64与LongAdder
第3章 Lock与Condition
- 互斥锁
- 读写锁
- Condition
- StampedLock
第4章 同步工具类
- Semaphore
- CountDownLatch
- CyclicBarrier
- Exchanger
- Phaser
第5章 并发容器
- BlockingQueue
- BlockingDeque
- CopyOnWrite
- ConcurrentLinkedQueue/Deque
- ConcurrentHashMap
- ConcurrentSkipListMap/Set
第6章 线程池与Future
- 线程池的实现原理
- 线程池的类继承体系
- ThreadPoolExector
- Callable与Future
- ScheduledThreadPoolExecutor
- Executors工具类
第7章 ForkJoinPool
- ForkJoinPool用法
- 核心数据结构
- 工作窃取队列
- ForkJoinPool状态控制
- Worker线程的阻塞一唤醒机制
- 任务的提交过程分析
- 工作窃取算法:任务的执行过程分析
- ForkJoinTask的fork/join
- ForkJoinPool的优雅关闭
第8章 CompletableFuture
- CompletableFuture用法
- 四种任务原型
- CompletionStage接口
- CompletableFuture内部原理
- 任务的网状执行:有向无环图
- allOf内部的计算图分析
需要这份并发编程JDK源码剖析的老哥帮忙点赞加关注小编一下,然后点这里直达即可获取