У меня есть Java-приложение, которое использует несколько потоков, которые запускаются через заданное время с помощью ScheduledExecutorService. Каждый час начинается поток, выполняет некоторую работу и заканчивается правильно. Но иногда (например, когда HTTP-запрос не работает) этот поток вылетает, и служба-исполнитель больше не запускает такой поток. Затем мне нужно выйти из приложения (с помощью Ctrl-C) и снова перезапустить его.Java-приложение работает некорректно после сбоя потока
Возможно ли, что прерывистая нить прерывает ExecutorService для создания новых потоков? Я не хочу, чтобы всегда проверять, работает ли приложение, или нет, потому что оно работает на моей малине Pi и должно работать 24 часа в сутки.
Возможно, вы сможете помочь мне найти решение моей проблемы!
EDIT:
ExecutorService также работает на своем собственном потоке. Это, как запускаются потоки:
@Override
public void run() {
threadFuture = executorService.scheduleAtFixedRate(new IntervalThread(i, p, c, a), 60, 60, TimeUnit.MINUTES);
}
И это нить, которая вызывается каждые 60 минут:
@Override
public void run() {
try {
// do some HTTP request here
// if an error occurs, catch it and log the error message
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
}
Если поток (что делает HTTP запросы) chrashed, весь ExecutorService больше не работает. Как это возможно, если я поймаю каждое исключение?
Фрагменты кода из 'инициализации ExecutorService' и вашего класса' Runnable' было бы полезно. –