常规退出和eclipse终止有什么区别?

时间:2014-04-03 22:54:58

标签: java eclipse multithreading

当我按ALT + F4(Win)或CMD + Q(Mac)退出程序时,程序将一直挂起,直到我强制使用任务管理器退出程序。

然而,当我使用eclipse的终止按钮终止程序时,程序很好地关闭而不会挂起。

关闭应用程序的两种方法有什么区别?

例如,是因为当我们进行常规退出(即ALT + F4)时,应用程序中的线程不会自行终止,而在eclipse中,线程被“强制”终止?

  

修改

     

我刚刚意识到System.exit(0)等同于“强制退出”(即没有挂起)。有什么方法可以检测到何时按下ALT + F4或CMD + Q,系统/程序会从那里检测到System.exit

     

编辑2

     

我已经完成了以下操作,但挂起仍然存在:

     
      
  1. 我尝试将所有线程都更改为守护进程。

  2.   
  3. 我已经使用 jvisualvm 查看按下ALT+F4后哪些线程仍在运行。我确实意识到一些“Pool-i Thread-i”线程仍在运行。 (有没有办法确定代码的哪一部分代表“Pool-i Thread-i”?我怀疑这些线程是由我使用的第三方库之一创建的。)

  4.   
  5. 在我的线程/ callables中,我在线程的最后有一个控制台输出,当我ALT+F4程序时,控制台输出将显示。例如,

  6.   
public Void call() {
    while(true) {

    }
    System.out.println("Thread has finished");
}
  

当我按ALT+F4时,控制台将打印“线程已完成”,因此我假设这些线程已正确终止。

1 个答案:

答案 0 :(得分:0)

Eclipse终止按钮基本上执行任务管理器中强制退出的操作 - 它强制终止进程。 Alt + F4或CMD + Q通知程序终止,应及时响应;如果它没有,您将在Windows中获得无响应的程序警报。