黑马程序员技术交流社区

标题: sleep()和wait()的差别是什么? [打印本页]

作者: 宋文轩    时间: 2011-11-11 14:23
标题: sleep()和wait()的差别是什么?
sleep()和wait()的差别是什么?具体点,原理不太懂。
作者: 欧阳文愿    时间: 2011-11-11 14:38
功能都差不多,都是用来进行进程控制的,最只要区别是,sleep()不释放同步锁,wait()要释放同步锁,在用法上面,sleep()可以用时间制定要自动醒过来,wait()要用notify()才能唤醒,还有sleep()要捕捉异常,而wait()不用
作者: 梦女孩    时间: 2011-11-11 14:44
sleep()是Thread类,wait()是Object类,sleep()不能改变对象的机锁。当在一个Synchronized的方法中调用sleep()时,线程虽然休眠但对象的机锁并没有被释放,其他线程仍然无法访问这个对象。而wait()方法则会休眠线程的同时释放机锁,其他线程就可以访问该对象了。
作者: 骚灵小情歌    时间: 2011-11-11 14:52
后面基本都是常用sleep()吧   可以指定“睡眠”多长时间.  其实我是来看2  3楼的
作者: 刘福双    时间: 2011-11-11 15:17
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
作者: xiwangliujiao    时间: 2011-11-11 23:40
sleep()是指线程休息一会后自己就又醒过来,插入到就绪队列中等待分配资源,而wait()是不能自己醒来了,必须要用notify()方法才能将其唤醒,本人也是刚看,大致了解这么多,希望对你能有所帮助
作者: quanhui    时间: 2011-11-12 13:55
sleep(milliseconds)是线程类的静态方法,当被调用时,虽然暂停工作,却仍然持有着cpu的使用权,什么时候设定的时间到了,什么时候醒过来继续执行程序,使用时必须要捕获异常;而wait()是Object的方法,当被调用时是进入等待池中等待,并且让出cpu的使用权,让其它线程可以得到使用权,在被notify()方法或notifyAll()方法唤醒后再重新去队列中等待被分配到cpu的使用权,使用时不需要捕获异常。


作者: 胡文杰    时间: 2011-11-12 15:57
也就是一个没有释放资源,一个释放资源,sleep是让线程休息一下,时间可以自己来设定,就好像一个人走路累了,休息一下,而wait释放资源,累了,我就睡觉,你不叫我,我就不醒不了!




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