Wait()、sleep()和yield()方法的区别
程序员文章站
2022-07-12 20:43:25
...
Wait()、sleep()和yield()方法的区别
1、所属类不同:wait()是Object类中的非静态方法;sleep()是Thread类中的静态方法;yield()也是Thread类中的静态方法。
2、作用不同:wait()用于线程同步或者线程之间进行通信;sleep()用于休眠当前线程,并在指定的时间点被自动唤醒;yield()临时暂停当前正在执行的线程,来让有同样优先级的正在等待的线程有机会执行(如果等待的线程优先级较低,则当前线程继续执行)。
3、释放资源:wait()会释放线程所占用的锁和管程;sleep()释放线程所占用的锁,但不释放管程;yield()仅释放线程所占用的CPU。
4、应用场景不同:wait()适用于同步代码块中;sleep()休眠当前线程,应用场景没有限制;yield()暂停当前线程,应用场景也没有限制。
5、被唤醒后的状态不同:wait()被notify()或者notifyAll()唤醒后,先进入阻塞状态(先获得锁),然后进入就绪状态;sleep()被唤醒后,进入就绪状态;yield()不需要唤醒,一直处于就绪状态,获得CPU后继续运行。
1、所属类不同:wait()是Object类中的非静态方法;sleep()是Thread类中的静态方法;yield()也是Thread类中的静态方法。
2、作用不同:wait()用于线程同步或者线程之间进行通信;sleep()用于休眠当前线程,并在指定的时间点被自动唤醒;yield()临时暂停当前正在执行的线程,来让有同样优先级的正在等待的线程有机会执行(如果等待的线程优先级较低,则当前线程继续执行)。
3、释放资源:wait()会释放线程所占用的锁和管程;sleep()释放线程所占用的锁,但不释放管程;yield()仅释放线程所占用的CPU。
4、应用场景不同:wait()适用于同步代码块中;sleep()休眠当前线程,应用场景没有限制;yield()暂停当前线程,应用场景也没有限制。
5、被唤醒后的状态不同:wait()被notify()或者notifyAll()唤醒后,先进入阻塞状态(先获得锁),然后进入就绪状态;sleep()被唤醒后,进入就绪状态;yield()不需要唤醒,一直处于就绪状态,获得CPU后继续运行。
上一篇: struts2标签iterator
推荐阅读
-
C#中sleep和wait的区别分析
-
js数组切割方法(splice和slice的区别)
-
浅析ThinkPHP中execute和query方法的区别
-
JavaScript中的toString()和toLocaleString()方法的区别
-
setInterval和setTimeout的区别以及setInterval越来越快问题的解决方法
-
iOS----------componentsJoinedByString 和 componentsSeparatedByString 的方法的区别
-
php 中self,this的区别和操作方法实例分析
-
js数组切割方法(splice和slice的区别)
-
php中time()和mktime()方法的区别
-
php抽象方法和普通方法的区别点总结