Запустите другой поток / управляемый executor-runnable, который проверяет ExecutorService.awaitTermination(...)
в операторе try-catch в цикле, пока он не вернет true
, затем запустите свой код обработки завершения работы.Цикл необходим, потому что метод может преждевременно возвращаться при прерывании.
Примерно так:
public class ShutdownHandler implements Runnable {
private final ExecutorService service;
public ShutdownHandler(final ExecutorService service) {
this.service = service;
}
@Override
public void run() {
boolean terminated = false;
while (!terminated) {
try {
terminated = service.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
} catch (final InterruptedException ex) {
// check again until terminated
}
}
// your shutdown handling code here
}
}