这几个方法还是蛮容易弄混的,但是其实yield和其他四个存在本质区别(yield后是Runnable状态,其他是Blocked状态),之所以放在这里和其他四个一起比较是因为还是存在相似的地方的,比如说本地方法,是否执行后续代码等,看下面的表 ↓
除了上面的外还需要记住的是:
- wait()必须在synchronized中执行
- await()必须在lock()块中执行
========================================= - 在park()之前执行unpark()会让park()不执行(抵消park);
- 在wait()之前不能执行notify(),会抛出IllegalMonitorStateException;
- 在await()之前不能执行signal(),会抛出IllegalMonitorStateException。
========================================= - await()本身释放锁,再调用park()实现阻塞。(←park()由await()底层调用实现阻塞)