并发编程学习笔记 二
park / unpark 原理
每个线程都有自己的一个 Parker 对象,由三部分组成 _counter , _cond 和 _mutex
(1)当线程调用 park 方法时,会检查 counter 是不是为 0 ,若为 0 ,则获得 mutex 互斥锁,进入 cond 条件变量等待。设置 counter=0 。若为 1 ,则不阻塞,只是置 counter 为 0。
(2)当线程调用 unpark 方法时,设置 counter 为 1,并唤醒 cond 条件变量中的线程,线程恢复运行,并置 counter 为 0。
java 线程状态之间的相互转换
- NEW --> RUNNABLE
(1)调用线程的 start 方法。 - WAITING <–> RUNNABLE
(1)wait / notify,当 notify 竞争失败后,会从 WAITING 变为 BLOCKED
(2)join / join结束或interrupt
(3)park / unpark 或interrupt - BLOCKED <–> RUNNABLE
(1)sychronized 等 锁竞争成功或失败 - RUNNABLE --> TERMINATED线程代码运行完了
死锁 活锁 饥饿
- 死锁的四个条件
(1)