【发布时间】:2010-06-28 07:30:22
【问题描述】:
如何在java中杀死正在运行的线程
【问题讨论】:
标签: java multithreading
如何在java中杀死正在运行的线程
【问题讨论】:
标签: java multithreading
你可以通过调用Thread.interrupt()来请求线程中断
请注意,存在一些其他具有相似语义的方法 - stop() 和 destroy() - 但它们已弃用,因为它们是 unsafe。不要试图使用它们。
【讨论】:
destroy() 也有一个“小问题”说 “(此方法未实现。)”。即使你尝试使用它也不会起作用。
正如 Bozho 所说,Thread.interrupt() 是通用且正确的方法。但请记住,它需要线程配合;实现一个忽略中断请求的线程非常容易。
为了让一段代码以这种方式可中断,它不应忽略任何 InterruptedException,并且应在每次循环迭代时检查中断标志(使用 Thread.currentThread().isInterrupted())。此外,它不应该有任何不可中断的阻塞操作。如果存在此类操作(例如等待套接字),那么您将需要更具体的中断实现(例如关闭套接字)。
【讨论】:
很快你需要Thread.interrupt()
更多详情请查看本文Why Are Thread.stop, Thread.suspend,Thread.resume and Runtime.runFinalizersOnExit Deprecated?中的How do I stop a thread that waits for long periods (e.g., for input)部分。
【讨论】: