sleep和wait的区别

多线程的sleep和wait的区别, 网上答案其中有一个: sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
为什么? sleep 和wait 都有 throws InterruptedException 。为啥sleep 必须捕获异常?wait 不需要?
全部评论
sleep有5个字母,但有4个不重复的字母。 wait有4个字母,并且每个都不重复。 区别就是都有4个不重复的字母。
1 回复 分享
发布于 2017-07-31 09:07
wait的话会释放对象的机锁,使其他线程可以访问,但是sleep不会。(个人理解,有不对请指正)
点赞 回复 分享
发布于 2017-07-30 15:27
wait是对象的方法,sleep是线程的方法……
点赞 回复 分享
发布于 2017-07-30 15:29
sleep是占有,占着CPU的资源休眠,而wait是让该线程进入等待队列,让出CPU给其他的线程
点赞 回复 分享
发布于 2017-07-30 15:32
抛出了异常肯定要捕获吧,还能怎么办 楼上两个不同,以及: wait还可以通过notify唤醒 wait必须在取得了该对象的锁才能调用,不然异常
点赞 回复 分享
发布于 2017-07-30 19:03
个人理解,首先两个方法签名都有throws InterruptedException,所以你说到的答案中wait()不需要捕获异常这一点我不是很能理解。 其次,InterruptedException在<<Java并发编程实战>>这本书中,作者指出这个异常事实上类似于传统意义上的中断概念。调用者需要一个方式来得知当前的线程已被“中断”。这里InterruptedException就起到了这么一个通知的作用,例如: try { Thread.sleep(100); } catch (InterruptedException ex) { // Stop immediately and go home } 这里的异常就可以向外流转,让调用者来作出当线程发生“中断”这一事件后的响应。如果sleep只是单纯的sleep,不对在sleep过程当中触发的“中断”作出任何响应(例如这里的抛出异常)的话,那么就等同于你忽略了这个时段内线程中的“中断请求”,这样是不符合java线程设计的(这个可以参考下Thread#interrupt()方法的文档)。总而言之,java的线程设计的期望是要么能快速执行完毕自动结束,要么就是执行时间较长但是能够随时响应“中断” If your code is fast, you never check the interruption flag, because you don't want to deal with any interruptions. If your code is slow and may take seconds to execute, make it explicit and handle interruptions somehow. Ref: http://www.yegor256.com/2015/10/20/interrupted-exception.html 我不是专业写java后台的,如果有更专业的见解欢迎来讨论。这个问题我个人认为是一个非常好的问题👍
点赞 回复 分享
发布于 2017-07-30 20:49

相关推荐

01-17 08:34
门头沟学院 Java
想找对象的单身狗在努力存钱:这工资不低了,再高点人家要招博士硕士的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务