e.printStackTrace();
}
System.out.println(“ShutdownHook execute end…”);
System.out.println(“Sytem shutdown over, the cost time is 10000MS”);
}
}
下面我们在 Windows 环境中对通用的 Java 优雅退出程序进行测试,打开 CMD 控制台,拉起待测试程序,如下所示:
启动进程:
查看线程信息,发现注册的 ShutdownHook 线程没有启动,符合预期:
在控制台执行 Ctrl+C,使进程退出,示例如下:
如上图所示,我们定义的 ShutdownHook 线程在 JVM 退出时被执行,作为测试程序,它休眠 10S 之后退出,控制台打印的相关信息如下:
下面我们总结下通用的 Java 程序优雅退出的技术要点:
[](()Netty 的优雅退出
==========================================================================
在实际项目中,Netty 作为高性能的异步 NIO 通信框架,往往用作基础通信框架负责各种协议的接入、解析和调度等,例如在 RPC 和分布式服务框架中,往往会使用 Netty 作为内部私有协议的基础通信框架。
当应用进程优雅退出时,作为通信框架的 Netty 也需要优雅退出,主要原因如下:
-
尽快的释放 NIO 线程、句柄等资源;
-
如果使用 flush 做批量消息发送,需要将积攒在发送队列中的待发送消息发送完成;
-
正在 write 或者 read 的消息,需要继续处理;
-
设置在 NioEventLoop 线