[英]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.