Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

1.11 停止线程

使用Java内置支持多线程的Thread类去设计多线程应用是很常见的事情,然而多线程也给开发人员带来了一些新的挑战,如果处理不好就会导致超出预期的行为及难以定位的错误。

停止线程是多线程开发的一个重要的技术点,掌握此技术可以对线程的停止进行有效的处理,停止线程在Java语言中并不像break语句那样干脆,需要一些技巧性的处理。

本节将讨论如何更好地停止一个线程。停止一个线程意味着在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作,虽然这看起来非常简单,但是必须要做好防范措施,以便达到预期的效果。虽然停止一个线程可以使用Thread.stop()方法,但并不推荐使用,该方法确实可以停止一个正在运行的线程,但已经被弃用作废,即在将来的Java版本中,这个方法将不可用或不被支持。

大多数情况下,使用Thread.interrupt()方法停止一个线程,但这个方法不会终止一个正在运行的线程,还需要加入一个判断才可以完成线程的停止。关于此知识点,后面有专门的章节进行介绍,这里不再赘述。

在Java中有三种方法可以使正在运行的线程终止运行。

1)使用退出标志使线程正常退出。

2)使用stop()方法强行终止线程,但是这个方法不推荐使用,因为stop()和suspend()和resume()一样,都是作废过期的方法,使用它们可能发生不可预料的结果。

3)使用interrupt()方法中断线程。

这三种方法都会在后面的章节进行介绍。