A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘永昌 黑马帝   /  2011-11-2 14:42  /  2563 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

sleep()与wait()这两个方法有什么异同点?

7 个回复

倒序浏览
sleep必须捕获异常,而wait不需要捕获异常.
回复 使用道具 举报
sleep()与wait()都是Thread类的方法,
调用他们时都是放弃线程的执行权,就好像他们都去睡觉了,没有知觉了,也就不会运行了
区别是,sleep()一个参数,如sleep(1000);单位是毫秒,即睡一秒钟,这就像他定了一个闹钟,到时间后闹钟会让线程醒来
而wait()没有闹钟,只有要别人来叫醒他,即另一个线程的notfy() 和nofifyAll()方法

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 不错哈。

查看全部评分

回复 使用道具 举报
李建雄 发表于 2011-11-2 15:10
sleep()与wait()都是Thread类的方法,
调用他们时都是放弃线程的执行权,就好像他们都去睡觉了,没有知觉了,也 ...

:)很专业,谢啦?
回复 使用道具 举报
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() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
高美云 发表于 2011-11-2 16:30
wait()是Object的方法
sleep()是Thread的方法

wait()是继自Object的方法 :)
感谢!
回复 使用道具 举报
秦冲 黑马帝 2011-11-3 06:37:03
7#
1.wait()和sleep()这两个方法来自不同的类分别是Thread和Object.
2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法.
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用.
4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常.

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
史晓霞 黑马帝 2011-11-4 22:15:58
8#
sleep()会指定睡眠的时间,当时间到时,自动存活运行,而wait()是失去执行权,不需唤醒才可能有执行权力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马