我正在运行一个java进程,不幸的是进程中的一个线程被挂起。
我找到了使用jstack挂起的线程ID ,但是我无法找到关于如何使用id中断此线程的任何引用?
是否可以使用processId和ThreadId 从控制台中断/停止线程(或基本上在进程外)?
有关如何解决此问题的任何建议?
PS:我不想杀死这个进程,因为它只挂了一个线程。此外,我也不想将代码更改为停止/中断线程。我只想杀死它,所以它的所有资源都可以释放。答案 0 :(得分:2)
在JVM中杀死一个线程是没有的,但至少不是故意实现的。
话虽如此,如果您已使用适当的参数启动JVM,以便可以启动它的远程JMX会话,您实际上可以暂停该线程并向其中注入RuntimeException
,这几乎是肯定会终止它(除非你正在做一些与RuntimeException
s一样的事情)。
P.S。你永远不会在生产中启动你的JVM,允许流氓JMX连接,如果你没有投入生产,我猜你认为上述方法对你没什么帮助。
答案 1 :(得分:-1)
您应该能够向进程发送SIGINT,这应该由所有线程接收。 (这是catch(InterruptedException ex)...)