区别

sleep()、yield()、join()都是Thread类的方法

wait()是Object类的方法

Tips

  1. sleep抱着锁转为阻塞态,同时其他所有线程争抢cpu资源

    yield抱着锁转为就绪态,只有和调用yield的线程优先级相同或更高的线程才有资格争抢cpu资源(调用yield的线程也加入争抢,所以会出现调用了yield的线程依旧继续执行的情况)

  2. 被其他线程调用join而被插队的线程必须等到join的线程执行完毕之后才会从阻塞态转为就绪态(被插了队就不敢吭声了!

  3. wait会放弃锁和cpu,转为阻塞态,需由notify或notifyAll唤醒。

  4. wait只能在同步代码块或同步类中被调用,和notify、notifyAll搭配使用

  5. 使用wait可能会出现虚假唤醒,在循环中使用可避免!(判断用while替换if可解决虚假唤醒的问题)