首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
书海为家
郑州大学 Java
发布于上海
关注
已关注
取消关注
有一道关于中断的面试题,看看大家是否知道答案:
https://www.nowcoder.com/discuss/859405187675377664
@书海为家:
中断的本质
在Java中,停止一个线程的主要机制是中断,中断并不是强迫终止一个线程,它是一种协作机制,是给线程传递一个取消信号,但是由线程来决定如何以及何时退出。public boolean isInterrupted()public void interrupt()public static boolean interrupted()每个线程都有一个标志位,表示该线程是否被中断了。isInterrupted:返回对应线程的中断标志位是否为true。interrupted:返回当前线程的中断标志位是否为true,但它还有一个重要的副作用,就是清空中断标志位,也就是说,连续两次调用interrupted(),第一次返回的结果为true,第二次一般就是false(除非同时又发生了一次中断)。interrupt:表示中断对应的线程。中断具体意味着什么呢?下面我们进一步来说明。不同状态的线程对中断interrupt()的反应线程状态对中断的反应线程应该做什么RUNNABLE如果线程在运行中,且没有执行IO操作,interrupt()只是会设置线程的中断标志位,没有任何其他作用。线程应该在运行过程中合适的位置检查中断标志位,比如,如果主体代码是一个循环,可以在循环开始处进行检查。WAITING/TIMED_WAITING线程调用join/wait/sleep方法会进入WAITING或TIMED_WAITING状态,在这些状态时,对线程对象调用interrupt()会使得该线程抛出InterruptedException。注意:抛出异常后,中断标志位会被清空,而不是被设置。InterruptedException是一个受检异常,线程必须进行处理。我们在异常处理中介绍过,处理异常的基本思路是:如果知道怎么处理,就进行处理,如果不知道,就应该向上传递,通常情况下不应该捕获异常然后忽略。捕获到InterruptedException,通常表示希望结束该线程,线程大致有两种处理方式:向上传递该异常,这使得该方法也变成了一个可中断的方法,需要调用者进行处理;有些情况,不能向上传递异常,比如Thread的run方法,它的声明是固定的,不能抛出任何受检异常,这时,应该捕获异常,进行合适的清理操作,清理后,一般应该调用Thread的interrupt方法设置中断标志位 Thread.currentThread().interrupt(); ,使得其他代码有办法知道它发生了中断。BLOCKED如果线程在等待锁,对线程对象调用interrupt()只是会设置线程的中断标志位,线程依然会处于BLOCKED状态,也就是说,interrupt()并不能使一个在等待锁的线程真正“中断”。在使用synchronized关键字获取锁的过程中不响应中断请求,这是synchronized的局限性。如果这对程序是一个问题,应该使用显式锁。改用 ReentrantLock。NEW/TERMINATE如果线程尚未启动(NEW),或者已经结束(TERMINATED),则调用interrupt()对它没有任何效果,中断标志位也不会被设置。/如何正确地取消/关闭线程interrupt方法不一定会真正“中断”线程,它只是一种协作机制,如果不明白线程在做什么,不应该贸然地调用线程的interrupt方法,以为这样就能取消线程。对于以线程提供服务的程序模块而言,它应该封装取消/关闭操作,提供单独的取消/关闭方法给调用者,外部调用者应该调用这些方法而不是直接调用interrupt。作为线程的实现者,应该提供明确的取消/关闭方法,并用文档描述清楚其行为;作为线程的调用者,应该使用其取消/关闭方法,而不是贸然调用interrupt。可以参考 ExecutorService 的 shutdown() shutdownNow() 等实现。
点赞 0
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
今天 12:33
中国传媒大学 数据分析师
实习最怕听到的一句话
1. “你先坐着,等我安排。”2. “这个不急,下班前给我就行。”3. “随便弄弄,差不多就行。”4. “你自己看着办吧。”5. “来,把这个也顺便做了。”6. “上次不是教过你吗?”7. “你觉得这样可以吗?”8. “明天不用来了。”实习哪有不疯的,全靠硬撑罢了!#实习时最怕听到的一句话#
点赞
评论
收藏
分享
04-17 08:55
广西大学 算法工程师
影石 AI开发 一面(日常)
1. 自我介绍2. TCP 和 IP 的职责边界是什么,为什么说“HTTP 基于 TCP,TCP 基于 IP”这个表述只对了一半IP 负责尽力而为地把报文从源地址送到目标地址,它不保证到达、不保证顺序,也不保证不重复。TCP 建立在 IP 之上,提供有连接、可靠传输、流量控制、拥塞控制和按序交付。HTTP 是应用层协议,它依赖传输层提供的可靠字节流,但 HTTP 本身并不“知道”底下是不是 TCP,也可以跑在 QUIC 上。所以“HTTP 基于 TCP”对传统 HTTP/1.1 和 HTTP/2 是对的,但对 HTTP/3 就不成立;“TCP 基于 IP”则更准确,因为 TCP 的寻址和转发确...
AI-Agent面试实战...
点赞
评论
收藏
分享
04-08 18:40
河北工程大学 Java
两个小时写两道力扣题正常吗
,有没有什么老主神学,祝我一臂之力
Gardenia06...:
刚开始学是这样的,可以看看左神和灵神都讲的不错
点赞
评论
收藏
分享
04-17 18:15
西安财经大学 数据分析师
人到中年,慢一点没关系
最近很多人问我,怎么晚上不直播干活了。是因为看到张雪峰老师因过劳离世,心里被狠狠敲醒了。以前上班,一边沟通、一边做表、一边盯直播、随时接电话,同时回复好几个人的消息,大脑不停地思考方案和解决问题的办法,工作强度是以前上班时候的好几倍,时间长了头疼胸闷,硬扛着。已经透支了。看了看近几年因拼命突然离场的人越来越年轻,我才明白:人生不是冲刺,慢一点、稳一点,反而水到渠成。如今妥了数据工具第一阶段已落地推广,后续专心运营即可,不用再耗神透支。身体才是根本,往后好好生活,远离消耗,放慢节奏,一切都会慢慢变好。
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
没个“能打”的项目,简历关都过不去
7.8W
2
...
建发 vs 象屿 vs 工行厦门 vs 厦门银行
7.0W
3
...
刷了3段实习,我发现90%的“金融科技项目”都是假的
8038
4
...
学院二本圆梦字节,提前结束暑期啦
7970
5
...
恒生电子春招
6234
6
...
整组的实习生全被干掉了...
4567
7
...
虾皮五面(提前挂)
4106
8
...
字节27agent开发实习一面凉经分享
3969
9
...
28 届双非蒟蒻的第一段小厂实习之路
3834
10
...
多益网络三面
3834
创作者周榜
更多
正在热议
更多
#
我的求职进度条
#
1232137次浏览
9111人参与
#
第一份工作应该选择高薪还是大平台
#
220687次浏览
1041人参与
#
华泰星战营,提前锁定校招offer
#
4573次浏览
277人参与
#
你简历上最心虚的一句话
#
1972次浏览
19人参与
#
考公VS就业,你怎么选?
#
100008次浏览
523人参与
#
哪些公司对双非友好
#
230088次浏览
1236人参与
#
卷__卷不过你们,只能卷__了
#
59951次浏览
756人参与
#
校招第一份工作你干了多久?
#
150201次浏览
631人参与
#
商战,最累的是我们
#
31672次浏览
99人参与
#
小红书求职进展汇总
#
238519次浏览
1397人参与
#
面试线索爆料
#
127261次浏览
699人参与
#
大疆求职进展汇总
#
699858次浏览
4351人参与
#
春节前,你还在投简历吗?
#
43074次浏览
351人参与
#
字节7000实习来了,你投了吗?
#
44245次浏览
348人参与
#
AI时代还有必要刷leetcode吗?
#
50620次浏览
587人参与
#
工作中,努力重要还是选择重要?
#
286053次浏览
2587人参与
#
机械求职避坑tips
#
100363次浏览
580人参与
#
为了实习逃课值吗?
#
79602次浏览
572人参与
#
国企/银行/研究所公司爆料
#
209301次浏览
920人参与
#
格力求职进展汇总
#
213533次浏览
1276人参与
#
大学生该如何认清当下的就业环境?
#
166227次浏览
913人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务