【问题标题】:killing a running thread in java?在java中杀死一个正在运行的线程?
【发布时间】:2010-06-28 07:30:22
【问题描述】:

如何在java中杀死正在运行的线程

【问题讨论】:

标签: java multithreading


【解决方案1】:

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

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

【讨论】:

  • 。 destroy() 没有被贬低。
  • 查看 Bozho 的“不安全”链接,特别是“我应该使用什么来代替 Thread.stop()”部分,了解实际杀死线程的规范方法.中断只会导致任何当前正在执行的阻塞调用停止运行,但本身不会停止线程执行。
  • @JavaUser 从 Java 1.5 开始
  • @JavaUser - JDK 1.5 之前的 javadoc for destroy() 也有一个“小问题”说 “(此方法未实现。)”。即使你尝试使用它也不会起作用。
【解决方案2】:

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

为了让一段代码以这种方式可中断,它不应忽略任何 InterruptedException,并且应在每次循环迭代时检查中断标志(使用 Thread.currentThread().isInterrupted())。此外,它不应该有任何不可中断的阻塞操作。如果存在此类操作(例如等待套接字),那么您将需要更具体的中断实现(例如关闭套接字)。

【讨论】:

    【解决方案3】:

    很快你需要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)部分。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      相关资源
      最近更新 更多