14

当我按ctrl-c在控制台中按什么顺序停止应用程序线程并调用关闭挂钩时?

4

2 回答 2

12

根据javadocs,注册的关闭钩子在JVM开始关闭时以未指定的顺序被调用;例如响应 CTRL-C。

应用程序线程不会以任何明确定义的方式“停止”。事实上,它们可以继续运行直到进程退出。

如果您希望您的线程以有序的方式关闭,您需要在关闭挂钩中执行一些操作以导致这种情况发生。例如,一个关闭钩子可以调用Thread.interrupt()来告诉工作线程停止他们正在做的事情......并调用join()以确保它已经发生。

于 2012-07-11T16:03:02.163 回答
5

我知道您可以通过添加关闭挂钩来指定当 Ctrl-C 被击中时应该发生什么。但我不确定按什么顺序。

private static void createShutDownHook()
{
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
    {

        @Override
        public void run()
        {
            System.out.println();
            System.out.println("Thanks for using the application");
            System.out.println("Exiting...");

        }
    }));
}
于 2012-07-11T15:01:10.000 回答