in src/main/java/com/epam/gmp/process/QueuedProcessThreadPoolExecutor.java [104:134]
public boolean shutdown(int timeout) {
long stopRequested = System.currentTimeMillis();
long stopDeadline = stopRequested + TimeUnit.MILLISECONDS.convert(timeout, TimeUnit.MINUTES);
logger.info("ThreadPool shutdown requested. Wait for running scripts to complete their job... countdown: {} milliseconds.", stopDeadline - System.currentTimeMillis());
while ((incompleteScripts.get() != 0) && ((System.currentTimeMillis() < stopDeadline))) {
logger.info("Await for termination, pending scripts=({}); threadPoolActive: {}; countdown: {} milliseconds.", incompleteScripts.get(), getActiveCount(), stopDeadline - System.currentTimeMillis());
synchronized (incompleteScripts) {
try {
incompleteScripts.wait(TimeUnit.MILLISECONDS.convert(10, TimeUnit.SECONDS));
} catch (InterruptedException e) {
logger.debug("Await check.");
}
}
}
if (incompleteScripts.get() > 0) {
logger.error("Shutdown timeout occurred.");
List<Runnable> frozenTasks = shutdownNow();
for (Runnable task : frozenTasks) {
logger.error("Frozen: {}", task);
if (task instanceof GroovyFutureTask) {
((GroovyFutureTask<?>) task).cancel(true);
}
}
return false;
} else {
logger.info("No active Scripts. Shutting down...");
shutdown();
return true;
}
}