在Java中如何终止一个正在运行的线程?

8
如何在Java中结束一个正在运行的线程

1
可能重复:https://dev59.com/BXVD5IYBdhLWcg3wGHeu - Ryan Fernandes
3个回答

12

您可以通过调用Thread.interrupt()来请求线程中断。

请注意,还存在一些具有类似语义的其他方法- stop()destroy() - 但它们已被弃用,因为它们是不安全的。不要尝试使用它们。


1
.destroy()没有被弃用。 - JavaUser
1
请查看Bozho的“unsafe”链接,特别是“What should I use instead of Thread.stop()”部分,以了解实际上“杀死”线程的规范方式。中断仅会导致当前正在执行的阻塞调用停止运行,但本身不会停止线程的执行。 - Andrzej Doyle
2
@JavaUser,自Java 1.5以来。 - Bozho
2
@JavaUser - 还有一个“小问题”,就是在JDK 1.5之前的javadoc中,destroy()方法被标注为“(此方法未实现。)”。即使你尝试使用它,它也不会起作用。 - Stephen C

6

正如Bozho所说,Thread.interrupt()是通用且正确的方法。但请记住,这需要线程合作;很容易实现一个忽略中断请求的线程。

为了使代码可中断,它不应忽略任何InterruptedException,并且应在每个循环迭代中检查中断标志(使用Thread.currentThread().isInterrupted())。此外,它不应具有任何不可中断的阻塞操作。如果存在这样的操作(例如等待套接字),则需要更具体的中断实现(例如关闭套接字)。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接