簡體   English   中英

ExecutorService關閉鈎子

[英]ExecutorService shutdown hook

我有以下線程代碼的控制台應用程序。 看來當我按Ctrl + C終止它沒有檢測到控制鍵時,我必須關閉命令提示符窗口。

任何線索為什么它沒有檢測到ctrl + c?

            final ExecutorService executor = Executors.newFixedThreadPool(threadPoolSize);
        final long SHUTDOWN_TIME = TimeUnit.SECONDS.toMillis(10);
        for (int i = 0; i < threadPoolSize; i++) {
            executor.submit(new MessageWorker(topicSubscriber));
        }
        //--
        //Add JVM shutdown hook
        Runtime.getRuntime().addShutdownHook(new Thread() {
            /**
             * @see java.lang.Thread#run()
             */
            @Override
            public void run() {
                executor.shutdown();
                try {
                    if (!executor.awaitTermination(SHUTDOWN_TIME, TimeUnit.SECONDS)) {
                        log.warn("Executor did not terminate in the specified time.");
                        List<Runnable> droppedTasks = executor.shutdownNow();
                        log.warn("Executor was abruptly shut down. " + droppedTasks.size() + " tasks will not be executed.");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

只是從閱讀代碼猜測,但是,看起來您的關機時間設置為10,000秒,所以我不會驚訝你不認為它會退出!

    final long SHUTDOWN_TIME = TimeUnit.SECONDS.toMillis(10);
    ...
    if (!executor.awaitTermination(SHUTDOWN_TIME, TimeUnit.SECONDS)) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM