Java并发13:阶段小结
逐篇梳理
整个前13篇文章是个串行进行的,循序渐进的学习逻辑,主要讲的都是并发方向的理论知识。
0-并发问题核心点:
宏观地梳理了下并发问题的核心点:分工,同步,互斥。解决并发问题主要要做这3个模块。
1-并发问题源头:
因CPU&内存&I/O存在效率差异,因此产生了CPU做线程切换。
因为线程切换,导致了可见性,有序性,原子性三个并发问题的源头。
2-Happens-Before规则
JVM通过Happens-Before
解决了可见性和有序性问题。
3-互斥锁(上)&4-互斥锁(下):
JVM通过加锁机制解决了原子性问题。
5-死锁:
因为加锁导致程序出现死锁,所以引出其解决方法。
6-等待通知机制:
因为线程争夺锁的关系和死锁等问题的存在,因此需要利用等待通知机制实现线程协作。
7-安全性&活跃性和性能问题:
1-6从微观角度看并发问题。
7则是从宏观看:
- 安全性:数据竞争、竞态条件
- 活跃性:死锁,活锁和饥饿问题
- 性能:锁带来等性能问题,评估性能
8-管程:
Java并发编程解决互斥和同步的核心基础理论。
以上关于并发的理论基础基本上全覆盖了,接下来具体到Java
上。
9-Java线程生命周期
Java线程基础,开发必备知识。
10-线程数量
如何根据场景估算线程数量。
11-局部变量
明确了方法执行过程,明确了局部变量不存在线程安全问题。
12-面向对象与并发
如何利用面向对象更好地实现并发。