黑马程序员技术交流社区

标题: sleep()和wait()的区别 [打印本页]

作者: 黄奇耀    时间: 2012-2-18 07:56
标题: sleep()和wait()的区别
感觉两个都是等待的意思。,但它们有什么不同呢?
作者: 何招俊    时间: 2012-2-18 08:54
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,系统认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待系统分配系统资源,
sleep(100L)是占用cpu,线程休眠100毫秒,其他进程不能再占用cpu资源,wait(100L)是进入等待池中等待,交出cpu等系统资源供其他进程使用,在这100毫秒中,该线程可以被其他线程notify,但不同的是其他在等待池中的线程不被notify不会出来,但这个线程在等待100毫秒后会自动进入就绪队列等待系统分配资源,换句话说,sleep(100)在100毫秒后肯定会运行,但wait在100毫秒后还有等待os调用分配资源,所以wait100的停止运行时间是不确定的,但至少是100毫秒。
作者: 邱纲    时间: 2012-2-18 09:36
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
作者: 熊玖帅    时间: 2012-2-18 09:48
1、这两个方法来自不同的类分别是Thread和Object
2、sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4、sleep必须捕获异常,而wait不需要捕获异常




作者: 李晓俊老师    时间: 2012-2-18 10:16
顾名思义,一个睡一个等,,既然是睡就有醒的时候,等的话没人来叫就一直在那等了呗..
sleep一般会设置睡多少秒,时间过后自然醒来,,而wait必须有人来notify它,不然它一直等待.................
作者: 成果    时间: 2012-2-18 10:18
sleep是睡。睡了就会自然醒
wait是等。要等到人家来通知你的。
作者: 孙汇川    时间: 2012-2-18 10:40
毕老师总结过它俩的区别:
sleep是等待,但是还占有cpu资源。
wait也是等,但是释放了cpu的资源。
作者: 花开~的季节    时间: 2012-2-18 11:16
简单的给你说吗,sleep()可以设置睡眠时间,wait()没有时间限制,直到被notify唤醒,你如果不知他什么时候醒,就用wait
作者: 郭繁森    时间: 2012-2-18 14:05
sleep(XX)可以理解为 CPU在执行sleep中的等待时间。
wait()是CPU执行到此跳到其他地方

作者: b_boywindy    时间: 2012-2-18 14:49
sleep()   是睡  有醒的 时候,不需要 人来 叫 而 wait 是 等待 需要人来 叫  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2