黑马程序员技术交流社区
标题:
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