Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何杀死Java中处于运行状态的线程?_Java_Multithreading - Fatal编程技术网

如何杀死Java中处于运行状态的线程?

如何杀死Java中处于运行状态的线程?,java,multithreading,Java,Multithreading,是否可以以非编程方式终止处于运行状态的线程 我知道*nix中的top命令可以显示线程。我可以杀死操作系统中的线程吗 我想知道是否有一种方法可以将线程链接到进程,这样我就可以只杀死那个特定的线程,而不杀死应用程序 我们的代码中有一个bug,它使线程以同步方法保持状态运行。线程在对象上保持锁“挂起”应用程序 该错误已修复。但是我想知道是否有可能。关于终止线程的所有疑问,请参考以下内容: 线程。中断请求关闭线程的方法。 或者,如果您使用的是线程池,则应使用executorService.shutdow

是否可以以非编程方式终止处于运行状态的线程

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

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

我们的代码中有一个bug,它使线程以同步方法保持状态
运行。线程在对象上保持
“挂起”应用程序


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

关于终止线程的所有疑问,请参考以下内容:
线程。中断请求关闭线程的方法。
或者,如果您使用的是线程池,则应使用
executorService.shutdown()和executorService.shutdownNow()关闭线程。在linux上,有一个类似于
kill
的命令

在windows上,可以从gui执行,不知道cli是否有任何功能。

简短的回答是“可能,但您不应该这样做,而且大多数情况下它也不会工作”

答案很长:

“也许……” 有些JVM实现将java线程映射到操作系统线程,有些则不映射。如果JVM映射到本机OS线程,您可能可以使用OS提供的某些处理工具(如
kill
on*nix)终止该线程。如果JVM执行绿色线程,这意味着它没有将Java线程映射到OS级线程,那么使用OS级工具基本上就是运气不佳。幸运的是,只有很少的JVM实现能做到这一点。无论JVM以何种方式组织线程,都可以使用java调试器。本文描述了执行此操作的过程:

“但你不应该这样做” 在操作系统级别杀死一个线程几乎肯定会使JVM处于未定义状态(读“JVM可能会崩溃或删除磁盘上的所有文件,或者做任何它喜欢做的事情”)。即使使用调试器,也只有极少量的java应用程序(阅读“no application Make on the planet”)能够正确处理外部应用程序正在杀死它的一个线程的事件。因此,这些应用程序将处于未定义状态(读取“应用程序可能会崩溃或删除磁盘上的所有文件,或执行fricking希望执行的任何操作”)

“而且大多数情况下它也不起作用”
如果线程真的被阻塞的IO等卡住了,那么杀死线程将不起作用,它将不会响应。如果一个程序被卡住,最好是杀死整个程序,找出程序的问题并修复它,而不是杀死一个线程。

如果你有一个pid,你可以杀死它!是否只在*nix上寻找解决方案?windows上的ProcessExplorer可以杀死单个线程,所以是的,这是可能的。可能在unix上也是如此。@MarekSebera:最好不是特定于操作系统的。但是a*nix解决方案很好!OP要求采用非程序化方法。海报要求采用“非程序化”方法。我知道这不是方法。我只是想知道。谢谢你的回答。