gpt4 book ai didi

java - 中断/杀死正在运行的线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:49 24 4
gpt4 key购买 nike

在发生特定超时时,我需要终止/取消/中断/使正在运行的线程失败。我使用 ExecutorService 来管理线程池,通过它我可以使用 Future 的 cancel() 方法取消任务,该方法将其从 ExecutorService 的 View 中删除,但线程本身继续运行。

网上环顾四周,人talk about interrupting threads有一个使用 isInterrupted() 方法的循环或正在等待可以通过显示 InterruptedException 来处理的 IO。

杀死既不循环(或没有任何其他 Hook )也不等待 IO 的线程的一般做法是什么?环顾四周,Thread.stop() 似乎可以满足我的需要(只是盲目地杀死线程),但不建议使用。

最佳答案

如果您使用 ExecutorService,那么您不应该弄乱它的线程:这个概念隐藏在执行器之后,它是比线程更高级别的概念,因此不提供管理它们的方法。我强烈建议您停止整个 Executor 而不是试图停止它的线程之一。

请注意 ExecutorService 中的线程是循环的,它们的循环包括等待任务在它们的任务队列中可用。

Java 中没有停止非循环线程的简单方法,您可以做的是:

  • 有一个可变的 boolean 标志,线程的 Runnable 会不时检查它是否应该停止(同一标志可用作线程循环中的条件)。
  • 调用 Thread.interrupt() 尝试(尽力而为,如果您不知道自己在做什么,则非常不安全)停止与同步相关的等待/锁定/获取/...线程被卡住了。

关于java - 中断/杀死正在运行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com