在java中,如使用线程池或者其他资源需要关闭,则可以使用java的钩子函数,在jvm中注册一个钩子函数,在jvm关闭的时候就会调用这里面的函数,实现某种优雅的停机
Runtime.getRuntime().addShutdownHook(new ShutdownHookThread(log, new Callable<Void>() {
@Override
public Void call() throws Exception {
controller.shutdown();
return null;
}
}));
来源,RocketMQ源码 org.apache.rocketmq.namesrv.NamesrvStartup#start