【问题标题】:Stop child threads in a runnable jar在可运行的 jar 中停止子线程
【发布时间】:2014-07-18 11:21:37
【问题描述】:

我有一个可运行的 jar 文件,我在其中运行 Start.java 文件。

Start.java 产生 3 个子线程。如何杀死 Start 线程和子线程?

这里是 Start.java

public class Start {

    public static void main(String[] args){
        ListenersManager.start();
        PollPatientPortalManager.start();
        PollHISManager.start();
    }
}

ListenersManager、PollPatientPortalManager 和 PollHISManager 都扩展Thread

【问题讨论】:

  • 你想从命令行杀还是从Java杀?
  • 我更喜欢 Java。但如果这不可能,那么命令行也可以。

标签: linux multithreading executable-jar


【解决方案1】:

开始线程是main 线程。要“杀死”它,您只需从main() 返回即可。

对于其他线程,您可以在它们上调用.destroy().stop()。请注意,这些方法很粗鲁,可能会导致错误(这就是它们被弃用的原因)。

正确的解决方案是定义一个线程不时检查的“信号”(如共享标志)。要阻止他们,请发送信号。

要从命令行终止所有线程,只需终止进程(请参阅man kill)。

相关:

【讨论】:

  • 但问题是我会制作一个可运行的 jar。我将在 jar 启动时运行启动线程。但是没有办法阻止 jar 本身的子线程。所以唯一的方法是通过命令行。我想写一个脚本来停止线程。有没有办法做到这一点?
  • 干净的方法是在main线程中监听一个信号。例如,您可以打开一个套接字并等待连接。然后命令行工具可以连接到套接字并发送命令,询问当前状态等。这样,您就可以干净地关闭。
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多