背景
回顾一下《Java并发编程实战》这个专栏,温度而知新。由于专栏内容较多,本文知识专栏的简单介绍和回顾。对了每节课下面的评论也是不错的。
课程目的
帮助那些掌握了Java业务开发能力的基础,每天苦于CURD但希望能够实现技术进阶的人。Java的并发是区分一个java工程师段位的不错的方法,所以不少大厂都会偏向拥有相关能力的人,实际上这些大厂工作也是95%跟并发没关系,但就怕那5%你不会,把事情搞砸了。
并发核心问题
- 分工,如何高效的拆解任务并分配给线程
- 同步,线程之间如何协作
- 互斥,保证同一时刻只容许一个线程访问公共资源
主要内容
理论基础
-
并发问题的主要源头
-
- 缓存导致的可见性问题
-
- 线程切换带来的原子性问题
-
- 编译优化带来的有序性问题
-
Java 内存模型,Happens-Before规则
Happens-Before 并不是说前面一个操作发生在后续操作的前面,它真正要表达的是:前面一个操作的结果对后续操作是可见的。就像有心灵感应的两个人,虽然远隔千里,一个人心之所想,另一个人都看得到。Happens-Before 规则就是要保证线程之间的这种“心灵感应”。所以比较正式的说法是:Happens-Before 约束了编译器的优化行为,虽允许编译器优化,但是要求编译器优化后一定遵守 Happens-Before 规则。 -
Java线程
-
互斥锁
基本覆盖了Java并发相关的 所有理论知识,通过这部分可以看到全景。
工具类
- Lock & Condition
- 读写锁ReadWriteLock
- CountDownLatch和CyclicBarrier,协同多线程
- 并发容器
- Executor与线程池
- 原子类
- Future相关(Future,CompletableFuture,CompletionService)
介绍的内容非常的实用,没有炫技的成分,但每项有又深入细节,不足了不少的知识短板。
并发模式设计
- Copy-on-Write模式
- Worker Thread模式
- 生产者-消费者模式
案例分析
案例相关内容也是非常精彩,首先介绍了 Guava的限流器,然后是高性能网络应用框架Netty,高性能队列Disruptory, 高性能连接池HiKariCP 。
每个章节都对较为核心的部分的代码进行了了分析,确实做到了,沉下去,看本质。
参考
本文内容大量参考《Java并发编程实战》,https://time.geekbang.org/column/intro/159