图1
注意点
- 对象获取锁失败或者获得锁的状态下调用wait方法后会释放锁,将进入等待队列等待被唤醒,当其他线程调用notify或notifyAll唤醒此线程,此线程将进入锁池去竞争锁,进入锁池的线程不一定能获得锁,还有可能回到等待队列。即等待队列和锁池是两个概念,不要搞混
- 线程进入阻塞状态,不会释放锁,满足条件时可以回到Running状态
- 新建(new)和死亡(dead)是单向的状态,不可重复
图2
注意点
- 图中的LockSupport类来自J.U.C包,在AQS等地方都有用到,可让当前线程释放资源挂载和取消挂载竞争资源
图3
注意点
- 和图1类似,相比图2,遗漏了当线程中断后进入死亡状态的情形