gpt4 book ai didi

java - 如何杀死处于 RUNNING 状态的 Java 线程?

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

有可能以非编程方式杀死处于 RUNNING 状态的线程吗?

我知道 *nix 中的 top 命令可以显示线程。我可以终止操作系统中的线程吗?

我想知道是否有一种方法可以将一个线程链接到一个进程,这样我就可以只终止那个特定的线程而不是应用程序。

我们的代码中有一个错误,该错误使同步方法中的线程处于 RUNNING 状态。线程保持对“挂起”应用程序的对象的

错误已修复。但我想知道是否可能。

最佳答案

简短的回答是“也许,但你不应该,而且大多数时候它也不会起作用”。

长答案是:

“也许……”一些 JVM 实现将 java 线程映射到 OS 线程,而另一些则不。如果 JVM 映射到 native OS 线程,您可以使用 OS 提供的某些进程工具(如 *nix 上的 kill)终止该线程。如果 JVM 执行绿色线程,这意味着它不会将 Java 线程映射到操作系统级别的线程,那么您使用操作系统级别的工具基本上就不走运了。幸运的是,只有很少的 JVM 实现可以做到这一点。无论 JVM 以何种方式组织它的线程,都可以使用一种方法,即使用 java 调试器。本文介绍了执行此操作的过程:http://www.rhcedan.com/2010/06/22/killing-a-java-thread/ .

“但你不应该这样做”在操作系统级别杀死线程几乎肯定会使 JVM 处于未定义状态(阅读“jvm 可能会崩溃或删除磁盘上的所有文件或做任何他妈的喜欢做的事”)。即使采用调试器方式,也只有极少量的 Java 应用程序(阅读“这个星球上没有应用程序”)能够正确处理外部应用程序正在杀死其中一个线程的事件。因此,这些应用程序将处于未定义状态(阅读“应用程序可能会崩溃或删除磁盘上的所有文件,或者做任何他妈的喜欢做的事”)。

“而且大多数时候它也不起作用”如果线程真的被一些阻塞的 IO 等卡住了,那么杀死线程将不起作用,它只会不响应。如果某个程序卡住了,最好终止整个程序,找到程序的问题并修复它,而不是终止单个线程。

关于java - 如何杀死处于 RUNNING 状态的 Java 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8180747/

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