主进程返回后java进程仍然存在

时间:2014-10-22 03:12:25

标签: java multithreading

我有一个main函数,可以创建一些复杂的子线程。我注意到在某些情况下我的main函数返回但java进程仍然存在。 (我知道main函数返回,因为在我的main函数的最后一行我打印一个日志)(我知道java进程仍然存在,因为'ps aux | grep stuff'告诉我这样)。

我想知道这是预期的行为吗?如何在main函数返回后确保java进程被终止?

谢谢! 厄尔本

2 个答案:

答案 0 :(得分:1)

如果您需要结束流程(以及所有子Thread(s)),请使用System.exit(0)

示例1

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Later: " + System.currentTimeMillis());
        }
    });
    try {
        System.out.println("now: " + System.currentTimeMillis());
        // System.exit(0);
    } finally {
        System.out.println("finally: " + System.currentTimeMillis());
    }
}

输出

now: 1413948102997
finally: 1413948102997
Later: 1413948103999

示例2

但是,从System.exit(0);删除评论,输出就像(没有最后以后

now: 1413948221629

答案 1 :(得分:0)

main本身就是一个主题。在main退出后,其他线程仍在运行。

  • 主要退出,所有退出: - 确保在main返回使用System.exit(0)
  • 之前结束所有子线程
  • 所有退出,主退出: - 如果您希望main线程等到所有线程都完成后使用Thread.join()