多线程的中断

本文通过一个具体的Java示例展示了如何使用Thread类的interrupt方法来中断一个正在运行的线程。示例中的SleepInterrupt类实现了Runnable接口并在其run方法中使用了Thread.sleep来模拟线程休眠,并捕获InterruptedException来响应中断请求。

当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它。

package ThreadTest;

public class SleepInterrupt implements Runnable{
    public void run(){
        try{
            System.out.println("在run()方法中-这个线程休眠20秒");
            Thread.sleep(2000);
            System.out.println("在run()方法中-继续运行");
        }catch(InterruptedException e){
            System.out.println("在run()方法中-中断线程");
            return;
        }
        System.out.println("在run()方法中-休眠之后继续运行");
        System.out.println("在run()方法中-正常退出");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SleepInterrupt si = new SleepInterrupt();
        Thread t = new Thread(si);
        t.start();
        //在此休眠是确保线程能多运行一会
        try{
            Thread.sleep(2000);
        }catch(InterruptedException e){}
        System.out.println("在main()方法中-中断其它线程");
        t.interrupt();
        System.out.println("在main()方法中-退出");
    }

}
### 如何在 Jupyter Notebook 中正确地中止多线程程序 当遇到需要中止正在运行的多线程程序的情况时,在 Jupyter Notebook 中可以采取几种不同的策略来安全地中止这些程序。 #### 使用 `KeyboardInterrupt` 异常处理机制 Python 的内置异常处理功能允许通过触发 `KeyboardInterrupt` 来停止执行中的代码。这可以通过按下 Jupyter Notebook 界面里的 "Stop" 按钮实现,该按钮会尝试发送中断信号给内核以终止当前单元格内的操作[^1]。 #### 设计可响应中断的任务 为了使多线程应用程序能够更优雅地应对突然的中断请求,建议设计成能定期检查状态并准备退出的形式。例如: ```python import threading import time class StoppableThread(threading.Thread): """继承自 Thread 类, 添加 stop() 方法.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._stop_event = threading.Event() def stop(self): self._stop_event.set() def stopped(self): return self._stop_event.is_set() def task(): while not thread.stopped(): # 如果设置了停止事件,则结束循环 print('Working...') time.sleep(1) thread = StoppableThread(target=task) thread.start() time.sleep(5) # 运行一段时间后... thread.stop() # 调用 stop 函数通知子线程应该结束了 thread.join() # 主线程等待直到子线程真正完成 print("Thread has been terminated.") ``` 此方式确保即使收到外部中断指令也能让工作线程有机会清理资源再退出。 #### 注意事项 - 不要依赖于强制杀死整个 Python 解释器作为常规手段,因为这样可能会丢失未保存的数据或造成其他副作用。 - 对于长时间运行的任务,应当考虑加入周期性的健康检查逻辑以便及时响应用户的控制意图。 - 当编写可能被中途打断的复杂业务流程时,应始终考虑到数据一致性和事务完整性的问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值