我有一个main函数,可以创建一些复杂的子线程。我注意到在某些情况下我的main函数返回但java进程仍然存在。 (我知道main函数返回,因为在我的main函数的最后一行我打印一个日志)(我知道java进程仍然存在,因为'ps aux | grep stuff'告诉我这样)。
我想知道这是预期的行为吗?如何在main函数返回后确保java进程被终止?
谢谢! 厄尔本
答案 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()