
sleep 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。不释放对象锁,millis之后进入running状态
wait 当前线程释放对象锁,进入等待队列。依靠notify()/notifyAll()唤醒或者wait(long timeout)timeout时间到自动唤醒。
join 也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。不释放对象锁,millis之后进入running状态。
notify() 唤醒在此对象监视器上等待的单个线程,选择是任意性的。notifyAll()唤醒在此对象监视器上等待的所有线程。
suspend 一旦调用suspend,线程会被立刻冻结,而且【不会有任何后续步骤】,这就是问题所在:如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前任何线程都不能访问该资源。如果重新开始目标线程的线程想在调用 resume 之前锁定该监视器,则会发生死锁。这类死锁通常会证明自己是“冻结”的进程。
yield yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

死锁
https://blog.csdn.net/JeamKing/article/details/73042650
https://blog.csdn.net/li396864285/article/details/51487637
网友评论