由于可能导致异常行为的产生,多线程技术显然对于开发人员来说提出了一系列新的挑战。本文,我们将就这些挑战之一:如何中断一个正在运行的线程展开讨论。
在Java中通过其内建的线程支持,编写多线程的程序还是相当简单的。然而,采用多线程技术将对程序开发人员提出了一些列的挑战,如果没有得到正确的处理,可能会导致异常行为的产生,以及难以发现的差错。本文,我们将就这些挑战之一:如何中断一个正在运行的线程展开讨论。
中断一个线程意味着在完成其任务以前,停止线程正在进行的工作,即有效的中止当前操作。线程中断后是等待新的任务还是继续进行下一步操作将取决于应用程序。
尽管在最初看起来比较简单,你还是需要预先采取一些措施以求获得理想的结果。这里就你必须注意的问题提出了一些建议:
首先,不要使用Thread.stop方法。尽管它的确可以中止一个正在运行的线程,但这样的方法并不安全,并遭到了开发人员普遍的反对。这也可能意味着在未来的Java版本中它可能不会出现。
另一种并不建议的方法是Thread.interrupt。有人可能会将其与上文提到的方法相混淆。不论它的名字表示什么,这种方法事实上并没有立即中断一个正在运行的线程(后来也不会),如列表A所示。它创建了一个线程,并且尝试使用Thread.interrupt来停止此线程。对Thread.sleep()的调用提供了充裕的时间来进行线程的初始化和结束。线程本身并没有做任何有用的事情。
如果运行列表A中的代码,在控制台中你可以看到类似的如下内容:
Starting thread...
Thread is running...
Thread is running...
Thread is running...
Interrupting thread...
Thread is running...
Thread is running...
Thread is running...
Stopping application...
即使在调用Thread.interrupt()之后,线程还是运行了一段时间。