如何优雅的结束一个线程

更新时间:02-03 教程 由 冷瞳 分享

如何优雅的结束一个线程?

谢谢邀请!

早期的jdk版本中提供了退出的方法:hread.stop, Thread.suspend, Thread.resume和Runtime.runFinalizersOnExit ,因为操作不安全,可能会出现不可控的结果,已不推荐使用。

在回答之前咱们先看下线程的几个状态和状态切换的过程,如下图(不想画了,网上盗图):

线程退出肯定是初始化后的任何一个状态(不包含终止态)退出。

线程启动后是独立运行的,正常来说启动后是无法干预运行的,只能等其正在运行结束,如果想要干预,只能在共享内存区加状态标识,其实jdk已经内置了一个状态标识就是中断标识,调用中断方法,但是waiting状态的线程会抛出中断异常,自己可以再优化下加共享状态变量。

总结一下有三种方法:

1、等线程自己执行完结束(这种最优雅,但是也没有讨论的意义了)。

2、调用中断方法,判断中断标识。但是waiting状态下会抛异常,不能算作优雅,示例代码如下:

3、自己加中断状态标识,示例代码如下:

总结下:

waiting状态:此状态下退出只能调用中断方法。

blocked状态:分两种,一种可中断,调用中断方法退出;一种不可中断,只能等running后退出。

ready状态:等cpu调度,不可干预。

running状态:自己加共享状态标识。

所以最终“优雅退出”代码如下:

声明:关于《如何优雅的结束一个线程》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2198794.html