当我按ALT + F4(Win)或CMD + Q(Mac)退出程序时,程序将一直挂起,直到我强制使用任务管理器退出程序。
然而,当我使用eclipse的终止按钮终止程序时,程序很好地关闭而不会挂起。
关闭应用程序的两种方法有什么区别?
例如,是因为当我们进行常规退出(即ALT + F4)时,应用程序中的线程不会自行终止,而在eclipse中,线程被“强制”终止?
修改
我刚刚意识到
System.exit(0)
等同于“强制退出”(即没有挂起)。有什么方法可以检测到何时按下ALT + F4或CMD + Q,系统/程序会从那里检测到System.exit
?编辑2
我已经完成了以下操作,但挂起仍然存在:
我尝试将所有线程都更改为守护进程。
我已经使用 jvisualvm 查看按下
ALT+F4
后哪些线程仍在运行。我确实意识到一些“Pool-i Thread-i”线程仍在运行。 (有没有办法确定代码的哪一部分代表“Pool-i Thread-i”?我怀疑这些线程是由我使用的第三方库之一创建的。)- 醇>
在我的线程/ callables中,我在线程的最后有一个控制台输出,当我
ALT+F4
程序时,控制台输出将显示。例如,
public Void call() {
while(true) {
}
System.out.println("Thread has finished");
}
当我按
ALT+F4
时,控制台将打印“线程已完成”,因此我假设这些线程已正确终止。
答案 0 :(得分:0)
Eclipse终止按钮基本上执行任务管理器中强制退出的操作 - 它强制终止进程。 Alt + F4或CMD + Q通知程序终止,应及时响应;如果它没有,您将在Windows中获得无响应的程序警报。