Java多线程 while内try/catch 导致自动清除中断信号
发布日期:2021-06-30 13:11:43 浏览次数:3 分类:技术文章

本文共 1133 字,大约阅读时间需要 3 分钟。

文章目录

while内try/catch 导致自动清除中断信号

示例代码如下

while循环内部, 进行了Thread.sleep(10)的try catch

public class CantInterrupt {
public static void main(String[] args) throws InterruptedException {
Runnable runnable = () -> {
int num = 0; while ( num <= 10000) {
if (num % 100 == 0) {
System.out.println(num + " 是100的整数"); } num++; //每一次循环,休眠10ms try {
Thread.sleep(10); } catch (InterruptedException e) {
e.printStackTrace(); } } }; //启动线程 Thread thread = new Thread(runnable); thread.start(); //此处的 Thread.sleep(5000); 是休眠主线程, 让子线程运行5s, //子线程运行5s后, 给出子线程的休眠信号 Thread.sleep(5000); thread.interrupt(); }}

程序运行如下 .

说明了即使发出了中断的信号, 抛出了异常, 但是程序依然会继续运行, 说明中断失败.
即使是在while 的判断中,加上线程状态的判断, 也不会成功的进行线程的中断.
主要的原因是 while循环内的这段try catch代码, 会把线程中断的状态位给清除掉了

try {
Thread.sleep(10); } catch (InterruptedException e) {
e.printStackTrace(); }

转载地址:https://javaweixin6.blog.csdn.net/article/details/108088184 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java多线程 中断线程最优方法之 优先抛出
下一篇:Java多线程 停止线程遇到线程阻塞如何处理?

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月19日 15时34分48秒