如何强制调用addShutdownHook(...)

时间:2016-11-16 07:38:18

标签: java

我希望一个线程能够连续接收来自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());
                    // }
                }
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

在响应your comment above时,没有运行关闭挂钩,因为您正在终止在IDE中运行的进程:这意味着您的程序永远不会接收任何SIGINT signal(参见a related answer),从逻辑上讲,关闭钩子永远不会被执行(有关钩子何时运行的描述,请参阅the API documentation for Runtime.addShutdownHook(Thread)。)

<强> TL; DR:不要在IDE内部测试系统接口功能(例如捕获信号);正确运行程序&#34;&#34;从命令行。