wait()、sleep()、yield()、join()方法的区别
区别
sleep()、yield()、join()都是Thread类的方法
wait()是Object类的方法
Tips
sleep抱着锁转为阻塞态,同时其他所有线程争抢cpu资源
yield抱着锁转为就绪态,只有和调用yield的线程优先级相同或更高的线程才有资格争抢cpu资源(调用yield的线程也加入争抢,所以会出现调用了yield的线程依旧继续执行的情况)
被其他线程调用join而被插队的线程必须等到join的线程执行完毕之后才会从阻塞态转为就绪态(被插了队就不敢吭声了!)
wait会放弃锁和cpu,转为阻塞态,需由notify或notifyAll唤醒。
wait只能在同步代码块或同步类中被调用,和notify、notifyAll搭配使用
使用wait可能会出现虚假唤醒,在循环中使用可避免!(判断用while替换if可解决虚假唤醒的问题)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Toweringx的博客!
评论