当前位置: 代码迷 >> 综合 >> Java线程:sleep(),wait(),await(),park(),yield()异同总结
  详细解决方案

Java线程:sleep(),wait(),await(),park(),yield()异同总结

热度:53   发布时间:2024-02-11 19:14:17.0

    这几个方法还是蛮容易弄混的,但是其实yield和其他四个存在本质区别(yield后是Runnable状态,其他是Blocked状态),之所以放在这里和其他四个一起比较是因为还是存在相似的地方的,比如说本地方法,是否执行后续代码等,看下面的表 ↓
在这里插入图片描述

除了上面的外还需要记住的是:

  • wait()必须在synchronized中执行
  • await()必须在lock()块中执行
    =========================================
  • 在park()之前执行unpark()会让park()不执行(抵消park);
  • 在wait()之前不能执行notify(),会抛出IllegalMonitorStateException;
  • 在await()之前不能执行signal(),会抛出IllegalMonitorStateException。
    =========================================
  • await()本身释放锁,再调用park()实现阻塞。(←park()由await()底层调用实现阻塞)
  相关解决方案