Reputation: 2451
I have console application with following threading code. It seems when i hit Ctrl+C to terminate it does not detect control keys, i have to close command prompt window.
Any clues why it is not detecting 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();
}
}
});
Upvotes: 10
Views: 8237
Reputation: 3410
Just a guess from reading the code, but, it looks like your shutdown time is set as 10,000 seconds, so I'm not surprised you don't think it's quitting!
final long SHUTDOWN_TIME = TimeUnit.SECONDS.toMillis(10);
...
if (!executor.awaitTermination(SHUTDOWN_TIME, TimeUnit.SECONDS)) {
Upvotes: 8