如何在Java中结束一个正在运行的线程
您可以通过调用Thread.interrupt()
来请求线程中断。
请注意,还存在一些具有类似语义的其他方法- stop()
和destroy()
- 但它们已被弃用,因为它们是不安全的。不要尝试使用它们。
destroy()
方法被标注为“(此方法未实现。)”。即使你尝试使用它,它也不会起作用。 - Stephen C正如Bozho所说,Thread.interrupt()是通用且正确的方法。但请记住,这需要线程合作;很容易实现一个忽略中断请求的线程。
为了使代码可中断,它不应忽略任何InterruptedException,并且应在每个循环迭代中检查中断标志(使用Thread.currentThread().isInterrupted())。此外,它不应具有任何不可中断的阻塞操作。如果存在这样的操作(例如等待套接字),则需要更具体的中断实现(例如关闭套接字)。
您需要使用Thread.interrupt()
方法。
更多细节请在文章Why Are Thread.stop
, Thread.suspend
,Thread.resume
and Runtime.runFinalizersOnExit
Deprecated?中查看“如何停止等待长时间(例如,等待输入)的线程”部分。