当我按ctrl-c在控制台中按什么顺序停止应用程序线程并调用关闭挂钩时?
问问题
12538 次
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 回答