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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋文轩 黑马帝   /  2011-11-11 14:23  /  3096 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

sleep()和wait()的差别是什么?具体点,原理不太懂。

评分

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

查看全部评分

7 个回复

倒序浏览
功能都差不多,都是用来进行进程控制的,最只要区别是,sleep()不释放同步锁,wait()要释放同步锁,在用法上面,sleep()可以用时间制定要自动醒过来,wait()要用notify()才能唤醒,还有sleep()要捕捉异常,而wait()不用

评分

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

查看全部评分

回复 使用道具 举报
sleep()是Thread类,wait()是Object类,sleep()不能改变对象的机锁。当在一个Synchronized的方法中调用sleep()时,线程虽然休眠但对象的机锁并没有被释放,其他线程仍然无法访问这个对象。而wait()方法则会休眠线程的同时释放机锁,其他线程就可以访问该对象了。

评分

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

查看全部评分

回复 使用道具 举报
后面基本都是常用sleep()吧   可以指定“睡眠”多长时间.  其实我是来看2  3楼的
回复 使用道具 举报
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

评分

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

查看全部评分

回复 使用道具 举报
sleep()是指线程休息一会后自己就又醒过来,插入到就绪队列中等待分配资源,而wait()是不能自己醒来了,必须要用notify()方法才能将其唤醒,本人也是刚看,大致了解这么多,希望对你能有所帮助
回复 使用道具 举报
quanhui 黑马帝 2011-11-12 13:55:46
7#
sleep(milliseconds)是线程类的静态方法,当被调用时,虽然暂停工作,却仍然持有着cpu的使用权,什么时候设定的时间到了,什么时候醒过来继续执行程序,使用时必须要捕获异常;而wait()是Object的方法,当被调用时是进入等待池中等待,并且让出cpu的使用权,让其它线程可以得到使用权,在被notify()方法或notifyAll()方法唤醒后再重新去队列中等待被分配到cpu的使用权,使用时不需要捕获异常。

评分

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

查看全部评分

回复 使用道具 举报
也就是一个没有释放资源,一个释放资源,sleep是让线程休息一下,时间可以自己来设定,就好像一个人走路累了,休息一下,而wait释放资源,累了,我就睡觉,你不叫我,我就不醒不了!

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马