终止线程

参考:https://www.cnblogs.com/Mateo-dengmin/p/15837676.html

方式一 通过volatile标识去判断退出线程

不推荐

理由:把开关停止的时候,无法停止线程。因为thread.put的时候发生了阻塞,被叫醒之前没办法进行下个任务。

方式二 使用stop()方法去退出线程

不推荐

理由:强制停止,会抛出ThreadDeath异常,业务流程不完整也不知道是啥时候关闭的。

方法三 suspend() 暂停和 resume()恢复线程

不推荐

理由:suspend暂停线程的时候不会释放锁,线程中公共数据(static)不同步。

方法四 使用interrupt方法中断线程(建议)

interrupt : 给线程设置中断标识,并没有中断这个线程。使用Thread.isInterrupt可以监听是否中断。监听到中断信号后可以退出线程或抛异常来优雅得终止线程。

这些需要注意的是

    • 再抛出异常时,不要生吞异常。
    • 如果可以处理此异常,请完成清理工作后退出。
    • 不处理此异常,不继续执行任务则需要重新抛出。
    • 不处理此异常,继续执行任务,则需要捕获到异常之后恢复中断标记(交由后续的程序检查中断)

posted on 2022-04-29 17:29  周公  阅读(31)  评论(0编辑  收藏  举报

导航