Это может произойти, если конструктор RunUpdater
выдает исключение RuntimeException.
В соответствии с JavaDo c:
Последовательность выполнения задач продолжается бесконечно, пока не произойдет одно из следующих исключительных завершений:
- Задача явно отменена через возвращенное будущее.
- Исполнитель завершается, что также приводит к отмене задачи.
- выполнение задачи вызывает исключение . В этом случае вызов get для возвращенного будущего вызовет исключение ExecutionException.
Последующие исполнения подавляются. Последующие вызовы isDone () в возвращенном будущем вернут true.
Я бы предложил заменить (в OtherFactionStats.main()
):
service.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS);
на
ScheduledFuture<?> scheduledFuture = service.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS);
try {
scheduledFuture.get();
} catch (InterruptedException e) {
System.out.println(e);
e.printStackTrace();
} catch (ExecutionException e) {
System.out.println(e);
e.printStackTrace();
}
service.shutdown();
Это распечатает любое исключение, которое происходит во время new RunUpdater()
, а затем корректно закроет ваше приложение.