主线程中执行thread.interrupt(),此时子线程没有处于sleep中,能中断子线程吗

来源:5-3 如何停止线程

海天s

2019-12-25

代码如下图:图片描述

第29行主线程执行thread.interrupt(),而此时子线程还在执行while循环,这种情况下,子线程执行完while循环后到第18行Thread.sleep()也能抛出异常?
经测试是可以的。
但我以前一直以为:只有子线程正在睡眠时,主线程中执行thread.interrupt()才会导致子线程的sleep抛出异常。我以前的理解是错误的?

写回答

2回答

悟空

2019-12-25

是的,你以前的理解是错误的。

0
1
海天s
非常感谢!
2019-12-25
共1条回复

海天s

提问者

2019-12-25

老师我看了Thread.sleep的源码注释:

//img1.sycdn.imooc.com/szimg/5e0380970988f95f08190460.jpg

也就是说,只要主线程执行了thread.interrupt(),哪怕子线程此时正在处于业务逻辑,那后面的sleep也会抛出异常?源码注释也不是特别清楚。


0
2
海天s
回复
悟空
感谢老师有问必答!
2019-12-25
共2条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程