sleep和wait的区别

多线程的sleep和wait的区别, 网上答案其中有一个: sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
为什么? sleep 和wait 都有 throws InterruptedException 。为啥sleep 必须捕获异常?wait 不需要?
全部评论
sleep有5个字母,但有4个不重复的字母。 wait有4个字母,并且每个都不重复。 区别就是都有4个不重复的字母。
2 回复 分享
发布于 2017-07-31 09:07
个人理解,首先两个方法签名都有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
抛出了异常肯定要捕获吧,还能怎么办 楼上两个不同,以及: wait还可以通过notify唤醒 wait必须在取得了该对象的锁才能调用,不然异常
点赞 回复 分享
发布于 2017-07-30 19:03
sleep是占有,占着CPU的资源休眠,而wait是让该线程进入等待队列,让出CPU给其他的线程
点赞 回复 分享
发布于 2017-07-30 15:32
wait是对象的方法,sleep是线程的方法……
点赞 回复 分享
发布于 2017-07-30 15:29
wait的话会释放对象的机锁,使其他线程可以访问,但是sleep不会。(个人理解,有不对请指正)
点赞 回复 分享
发布于 2017-07-30 15:27

相关推荐

第一次在牛客上发帖子,直接把写的笔试复盘md文件贴过来了。p.s.&nbsp;暑期实习投递的太晚,只能说希望能有结果吧,没有的话后面找找日常实习也行,现在切忌不要过度焦虑,把战线拉长,每天好好沉淀总会有好结果的。#&nbsp;题目回忆考试时长90分钟,其中10道选择题(总分30分),3道编程题(总分70分)##&nbsp;选择题前五道题目考的很杂,涉及到数据结构(平衡二叉查找树、栈),磁盘计算等等后面的题目主要是围绕ML和LLM展开的,lr调整策略(余弦退火等)一题,ViT一题,微调好像考了三题##&nbsp;编程题###&nbsp;第一题q次查询,每次查询:n,&nbsp;m,&nbsp;w2,&nbsp;w3初始数字是n,每次操作可以(1)将当前乘以二,花费w2代价(2)将其乘以三,花费w3代价对于每次查询,输出从n开始,让其最终大于等于m的最小代价数据范围:-&nbsp;n,&nbsp;m&nbsp;&lt;=&nbsp;1e9-&nbsp;q&nbsp;&lt;=&nbsp;1e5###&nbsp;第二题定义漂亮数:对于数字x,如果存在质数p,使得x&nbsp;%&nbsp;p&nbsp;==&nbsp;0且p&nbsp;*&nbsp;p&nbsp;&gt;=&nbsp;x,则x是一个漂亮数输入一个数字n,需要输出[1,&nbsp;n]范围内漂亮数的个数**数据范围**-&nbsp;n&nbsp;&lt;=&nbsp;5e5###&nbsp;第三题输入n,m接下来n-1行,每行u,v,d表示树上u和v之间有一条长度为d的边然后m行询问,每行x,y,要求输出树上经过x和y两个点的简单路径的最大长度(其中简单路径是指路径上所有点互不相同)**数据范围**数据范围n和q都是5e5#&nbsp;考场表现回忆以及反思##&nbsp;选择题刚开考的时候明显没有进入状态,没有时间的紧迫感。有一道关于栈的题目描述相当奇怪,自我感觉读题的时候不专注。用时大约15分钟##&nbsp;编程题###&nbsp;第一题**解题心路过程**1.&nbsp;一眼看上去是dp2.&nbsp;但是数据范围是1e9,dp存不下,那看样子不是dp3.&nbsp;考虑是不是一个数学问题可以直接求,比如是不是最佳策略只会是全乘二或者全乘三或者全乘三但是最后一次乘二4.&nbsp;发现完全把握不住,于是还是考虑dp,存不下那我们就记忆化搜索具体时间不记得了,但是我记得这个题目和第二题加起来是花了30分钟不到###&nbsp;第二题**解题心路过程**1.&nbsp;拿到题目首先转化条件,一个数是漂亮数当且仅当他的最大质因数的平方大于等于这个数(n&nbsp;&gt;=&nbsp;2时),特别的,1不是漂亮数2.&nbsp;这个时候有冲动直接暴力检验每一个数是不是漂亮数,但是这样是O(n&nbsp;*&nbsp;sqrt(n)),太慢了,决定再想想,想不出来就先写暴力3.&nbsp;印象中这个时候直接跳过去看了一下第三题,题干没仔细看完,又跳回来做第二题4.&nbsp;突然灵光一闪,逆向思维一下,对于每一个质数p,找到以其为最大质因数的所有漂亮数即可。类似于n&nbsp;=&nbsp;10时。p&nbsp;=&nbsp;2&nbsp;-&gt;&nbsp;2&nbsp;*&nbsp;1,&nbsp;2&nbsp;*&nbsp;2;&nbsp;p&nbsp;=&nbsp;3&nbsp;-&gt;&nbsp;3&nbsp;*&nbsp;1,&nbsp;3&nbsp;*&nbsp;2,&nbsp;3&nbsp;*&nbsp;3;&nbsp;p&nbsp;=&nbsp;5&nbsp;-&gt;&nbsp;5&nbsp;*&nbsp;1,&nbsp;5&nbsp;*&nbsp;2&nbsp;...&nbsp;直到p大于n**代码实现过程**实现的话就是质数筛,然后对于每一个p,统计其对于答案的贡献但是一开始写的是&nbsp;res&nbsp;+=&nbsp;n&nbsp;/&nbsp;p,发现过不了样例之后加了几条调试信息,于是改成了res&nbsp;+=&nbsp;min(n&nbsp;/&nbsp;p,&nbsp;p),这个调试过程大概花费了5分钟###&nbsp;第三题**解题心路过程**1.&nbsp;对于题干还不太理解,于是手玩了一下样例2.&nbsp;很快意识到这是一个lca&nbsp;+&nbsp;树上dp,思考了一下处理查询所需要的信息:首先对于每一个点,维护它往下的路径最大值(这个直接一个dfs就行,树上dp),然后对于查询的两个点,以他们为端点的路径就是一个lca&nbsp;+&nbsp;树上前缀和3.&nbsp;注意这里并没有去思考上面这个是不是有逻辑bug,直接就开始编码了**代码实现过程**整体编码过程并不利索,我有点分不清是我自己本身编码熟练度不够,还是考试的时候太放松没有紧迫感依稀记得&nbsp;当时看到时间还有30多分钟,感觉编码的时候有点悠哉游哉的,等实现完dfs,得到parent[][0],&nbsp;maxDis[],&nbsp;preSum[],&nbsp;dep[]之后进一步得到parent[][]可以确信的是,关于lca的部分我写的很谨慎,都是在脑子里把过程想清楚了再编码,这一点倒是正确的最后实现完毕之后,只剩下几分钟,跑了测试样例,WA于是加输出调试,发现自己读进来的x和y在找lca的时候直接修改了x,y。后续查询的时候又是直接用的x,y。赶紧修复了这个,找lca的时候修改的是x,y的副本的值样例过了,但是提交之后通过样例0%,这个时候时间好像只有3分钟了,突然意识到一个逻辑bug,当x是y的祖先关系的时候,maxDis[x]&nbsp;+&nbsp;maxDis[y]&nbsp;+&nbsp;(preSum[x]&nbsp;+&nbsp;preSum[y]&nbsp;-&nbsp;2&nbsp;*&nbsp;preSum[lca])中,两个maxDis有可能出问题,即y在x往下延申最大路径上但是我如何知道在不在?在困惑中考试结束了**赛后正解思考**记一个第二深的叶子再最深和第二深记一下具体是哪个叶子这样可以判断v是不是在u最深的叶子那条路上如果是就用第二深的#&nbsp;一些反思TODO
查看7道真题和解析 投递美团等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务