Java并发学习
学习参考链接 B站-黑马并发课程
一 入门
- 进程与线程的对比
- 并发与并行
- 并发
- 并行
- Runnable 与Thread的关系
- 查看指定java进程下的所以线程
- top -H -p 4901
- jstack 进程Id 可抓取指定进程的线程快照信息
- jconsole
- 栈帧
- 常用方法
- sleep: 从RUNNING/RUNNABLE 到 TIMED_WAITING ,再到RUNNABLE;
- yield: 从RUNNING 到RUNNABLE
7. 防止CPU占用100%
- join
- interrupt
- sleep wait join的 等处于阻塞状态的线程,打断会抛出异常: 打断标记会被重置为false; 抛出异常;
- 正常的线程:打断只是给线程添加标记,不会终止线程
1.1 设计模式-二阶段终止
- 思路
10. park
- 打断标记为真时,park会失效
- 不推荐的方法
1.2 主线程与守护线程
1.3 线程的状态
- 五种状态
2. 六种状态
二 共享模型之管程
2.1 线程安全的问题
2. 临界区
3 竞态条件
4 synchronized解决方案
5 synchronized 放在方法上
2.3 Monitor
-
对象头
-
Monitor
-
在字节码层面理解synchronized
-
synchronized的锁升级与优化
- 轻量级锁
- 锁膨胀
- 自旋优化
自旋在多核CPU的情况下才有意义
- 偏向锁
- 锁消除
- 参数:-XX:EliminateLocks
2.4 wait-notify
所以 wait 和notify方法必须 在同步代码块中进行使用
- 相同点:sleep和wait都会让出cpu的使用权;状态都是TIMED_WAITING
2.4 设计模式-保护性暂停
- 要点
2.5 Park & Unpark
- 使用方式
- park的原理
2.6 线程状态转换
- 重新理解线程状态转换
- 情况1
- 情况2
IDEA 在debug中
MONITOR 对应 BLOCKED
WAIT 对应 WAITING
RUNNING 对应RUNNABLE
2.7 多把锁
2. 活跃性
- 死锁
- 哲学家问题
- 活锁
- 饥饿问题
2.8 ReentrantLock
- 特点
- 可打断
- 锁超时
2.9 同步模式之顺序控制
- 本章小结
三 并发之 共享模型
3.1 序言
- JVM:
- 原子性
- 可见性
- 有序性
3. 可见性 vs 原子性