Java多线程 中断线程最优方法之 恢复中断

本文详细介绍了在Java中如何恢复线程中断状态以及如何屏蔽中断,通过具体代码示例展示了在线程的run方法中如何检查中断状态,并在捕获InterruptedException后重新设置中断标志,同时讨论了不处理中断信号导致的屏蔽现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

恢复中断

当需要中断线程的时候, 最佳的方法, 还是如下文章提到的抛出异常,即传递中断.
https://javaweixin6.blog.csdn.net/article/details/108091887

但是如果无法传递中断, 或者不想传递中断, 那么可以恢复中断.

恢复中断的代码示例:

public class RightWayStopThreadInProdReStop implements Runnable {
    @Override
    public void run() {
        while (true) {
            //在循环中, 判断线程是否已经被中断
            if (Thread.currentThread().isInterrupted()) {
                System.out.println("Interrupted 线程被中断, 程序运行结束 ");
                break;
            }
            reInterrupt();
            System.out.println("while循环中......");
        }
    }

    private void reInterrupt() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            //捕获到中断异常后, 重新恢复中断
            Thread.currentThread().interrupt();
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new RightWayStopThreadInProdReStop());
        thread.start();
        Thread.sleep(1000);
        thread.interrupt();
    }
}

其中的关键语句如下, 在子线程被中断的catch语句, 捕获后, 重新恢复中断.
并且在while循环中, 判断是否被中断.

程序运行如下 , 可以看到成功的中断了 .

把恢复中断的代码注释掉后, 可以看到中断失败. while循环一直在打印中.

屏蔽中断

什么叫做屏蔽中断 :
不在方法的签名中抛出异常, 也不catch语句中恢复中断,那么就感知不到线程的中断, 中断的信号就被屏蔽了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值