线程停止:看似简单,实则不然。
为什么需要线程停止
某些情况下,我们可能需要主动停止线程而不是等待线程自然终止( run方法返回)。一些典型场景如下:
- 服务或者系统关闭。 当一个服务不再被需要的时候,我们应该及时停止该服务所启动的工作者线程以节约宝贵的线程资源。 由于非守护线程(用户线程)会阻止Java虚拟机正常关闭,因此在系统停止前所有用户线程都应该先行停止。
- 错误处理。 同质(线程的任务处理逻辑相同)工作者线程中的一个线程出现不可恢复的异常时,其他线程往往就没有 必要继续运行下去了,此时我们需要主动停止其他工作者线程。
- 用户取消任务。 在某些比较耗时的任务执行过程中用户可能会取消这个任务,这时任务的取消往往是通过主动停止相应的工作者线程实现的。
线程停止方法
- isUse 变量标记
- reservat1ons 任务数量
使用这两个变量,才能优雅的关闭线程,第一不会导致关闭标记被吞没,第二不会在任务未执行完毕强制关闭。
参考资料
文档信息
- 本文作者:Bob.Zhu
- 本文链接:https://adolphor.github.io/2021/08/23/02-concurrent-thread-stop/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)