我希望一个线程能够连续接收来自kafka的消息,并且我想在按ctrl + C时关闭执行程序,但似乎没有调用addShutdownHook(...)方法。
如何确保它会被调用?非常感谢!
public class wwwwwwww {
static ExecutorService executor = Executors.newFixedThreadPool(2);
static {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
Logger.getGlobal().info("***************destroying");
executor.shutdownNow();
}
});
}
public static void main(String[] args) throws Exception {
executor.submit(new Runnable() {
@Override
public void run() {
Logger.getGlobal().info("If you see this log message, then logging is configured correctly and you should see the shutdown hook message.");
while (true) {
Logger.getGlobal().info("Inside loop");
// ConsumerRecords<String, String> records = consumer.poll(100);
// for (ConsumerRecord<String, String> record : records) {
// System.out.printf("offset = %d, key = %s, value = %s\n", record.offset(), record.key(), record.value());
// }
}
}
});
}
}
答案 0 :(得分:0)
在响应your comment above时,没有运行关闭挂钩,因为您正在终止在IDE中运行的进程:这意味着您的程序永远不会接收任何SIGINT signal(参见a related answer),从逻辑上讲,关闭钩子永远不会被执行(有关钩子何时运行的描述,请参阅the API documentation for Runtime.addShutdownHook(Thread)
。)
<强> TL; DR:不要在IDE内部测试系统接口功能(例如捕获信号);正确运行程序&#34;&#34;从命令行。