黑马程序员技术交流社区

标题: sleep()与wait() [打印本页]

作者: 刘永昌    时间: 2011-11-2 14:42
标题: sleep()与wait()
sleep()与wait()这两个方法有什么异同点?
作者: 李建雄    时间: 2011-11-2 15:10
sleep()与wait()都是Thread类的方法,
调用他们时都是放弃线程的执行权,就好像他们都去睡觉了,没有知觉了,也就不会运行了
区别是,sleep()一个参数,如sleep(1000);单位是毫秒,即睡一秒钟,这就像他定了一个闹钟,到时间后闹钟会让线程醒来
而wait()没有闹钟,只有要别人来叫醒他,即另一个线程的notfy() 和nofifyAll()方法
作者: 刘永昌    时间: 2011-11-2 15:37
李建雄 发表于 2011-11-2 15:10
sleep()与wait()都是Thread类的方法,
调用他们时都是放弃线程的执行权,就好像他们都去睡觉了,没有知觉了,也 ...

:)很专业,谢啦?
作者: 高美云    时间: 2011-11-2 16:30
wait()是Object的方法
sleep()是Thread的方法

虽然Thread是Object的子类,
但这两个方法根本就不会有什么混淆的东西

static void sleep(long millis)
          在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
static void sleep(long millis, int nanos)
          在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
void notify()
          唤醒在此对象监视器上等待的单个线程。
void notifyAll()
          唤醒在此对象监视器上等待的所有线程。
String toString()
          返回该对象的字符串表示。
void wait()
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
void wait(long timeout)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
void wait(long timeout, int nanos)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
作者: 李建雄    时间: 2011-11-2 18:33
高美云 发表于 2011-11-2 16:30
wait()是Object的方法
sleep()是Thread的方法

wait()是继自Object的方法 :)
感谢!
作者: 秦冲    时间: 2011-11-3 06:37
1.wait()和sleep()这两个方法来自不同的类分别是Thread和Object.
2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法.
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用.
4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常.
作者: 史晓霞    时间: 2011-11-4 22:15
sleep()会指定睡眠的时间,当时间到时,自动存活运行,而wait()是失去执行权,不需唤醒才可能有执行权力




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