java ScheduledExecutorService как убивать зависший поток?
Есть вот такой кусок кода
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(new Aggregator(configurer, jdbcManager), 20, 20, TimeUnit.MINUTES);
Т.к., пул потоков рассчитан на 1 поток, то, в случае его зависания, следующий поток запущен не будет. Мне же нужно при любых обстоятельствах запустить следующий поток. Каким будет лучший выход для меня? Единственное, что я смог придумать, это переписать код на
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.schedule(new Aggregator(configurer, jdbcManager), 20, TimeUnit.MINUTES);
service.shutdown();
service.awaitTermination(19, TimeUnit.SECONDS);
а затем поместить его в таймер с интервалом в 20 минут, т.е. в еще один поток. Таким образом, таймер будет каждый раз инициализировать новый ScheduledExecutorService , который в свою очередь будет ждать завершения выполнения потока 19 минут, если поток завершится раньше - прекрасно, если нет, то поток таймера в любом случае умрет, унеся с собой зависший поток из ScheduledExecutorService. Правильно же я понимаю, что если ScheduledExecutorService инициализирован в отдельном потоке, то со смертью этого потока умрут все потоки, порожденные ScheduledExecutorService? Будет ли всё описанное выше решением моей проблемы и какими могут быть более правильные решения?
P.s. Далеко не каждый раз поток из ScheduledExecutorService зависает. До первого зависания может пройти несколько дней. Предотвратить зависание потока на данный момент невозможно.