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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄奇耀 中级黑马   /  2012-2-18 07:56  /  2311 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

感觉两个都是等待的意思。,但它们有什么不同呢?

9 个回复

倒序浏览
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毫秒。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
1、这两个方法来自不同的类分别是Thread和Object
2、sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4、sleep必须捕获异常,而wait不需要捕获异常



评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
顾名思义,一个睡一个等,,既然是睡就有醒的时候,等的话没人来叫就一直在那等了呗..
sleep一般会设置睡多少秒,时间过后自然醒来,,而wait必须有人来notify它,不然它一直等待.................
回复 使用道具 举报
sleep是睡。睡了就会自然醒
wait是等。要等到人家来通知你的。
回复 使用道具 举报
孙汇川 黑马帝 2012-2-18 10:40:46
7#
毕老师总结过它俩的区别:
sleep是等待,但是还占有cpu资源。
wait也是等,但是释放了cpu的资源。
回复 使用道具 举报
简单的给你说吗,sleep()可以设置睡眠时间,wait()没有时间限制,直到被notify唤醒,你如果不知他什么时候醒,就用wait
回复 使用道具 举报
郭繁森 黑马帝 2012-2-18 14:05:38
9#
sleep(XX)可以理解为 CPU在执行sleep中的等待时间。
wait()是CPU执行到此跳到其他地方
回复 使用道具 举报
sleep()   是睡  有醒的 时候,不需要 人来 叫 而 wait 是 等待 需要人来 叫  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马