根据javadocs,当JVM开始关闭时,以未指定的顺序调用已注册的关闭挂钩; 例如,响应CTRL-C.
应用程序线程不会以任何明确定义的方式"停止".实际上,他们可以继续正常运行,直到流程退出.
如果您希望以有序的方式关闭线程,则需要在关闭钩子中执行某些操作以使其发生.例如,一个关闭钩子可以调用Thread.interrupt()告诉工作线程停止它们正在做什么...并调用join()以确保它已经发生.
我知道您可以通过添加关闭钩子来指定在击中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...");
}
}));
}
Run Code Online (Sandbox Code Playgroud)