Как проверить, здоров ли ExecutorService и работает ли он? - PullRequest
0 голосов
/ 03 мая 2019

Я разрабатываю настольное приложение без графического интерфейса для своей компании, которое планируется всегда запускать в фоновом режиме, получая информацию с веб-сайтов (через HtmlUnit) и обновляя некоторые строки в базе данных. Я использую ExecutorService для отправки задач, когда веб-сайт загружен, чтобы я мог установить время ожидания. Таким образом:

private ExecutorService taskExecutor = Executors.newFixedThreadPool(1);
private long timeout = 60000L;

private Page loadSite(Loader<Page> c) {
    Page page;
    Future<Page> result = taskExecutor.submit(c);
    try {
        page = result.get(timeout, TimeUnit.MILLISECONDS);
    } catch (TimeoutException | ExecutionException | InterruptedException ex) {
        close();
        result.cancel(true);
        throw new HandledWebException(ex);
    }

    return page.getEnclosingWindow().getEnclosedPage();
}

Вопросы:

  • Должен ли я проверить, способен ли мой объект taskExecutor запланировать задачу перед вызовом submit, и при необходимости восстановить его? (Продолжительное время казни мне кажется угрозой)
  • Должен ли я выключить и заново создать taskExecutor, если не удалось выполнить отправленную задачу?

1 Ответ

0 голосов
/ 03 мая 2019

1) Должен ли я проверить, способен ли мой объект taskExecutor планировать задачу перед вызовом отправки, и при необходимости восстановить его?

2) Должен ли язавершить работу и восстановить экземпляр taskExecutor, если отправленная задача не может быть завершена?

Для обоих вопросов нет необходимости

public static ExecutorService newFixedThreadPool (int nThreads)

Создает пул потоков, который повторно использует фиксированное количество потоков, работающих в общей неограниченной очереди.В любой момент не более nThreads потоков будут активными задачами обработки.Если дополнительные задачи отправляются, когда все потоки активны, они будут ждать в очереди, пока поток не станет доступным. Если какой-либо поток завершается из-за сбоя во время выполнения до завершения работы, новый будет занимать его место, если это необходимо для выполнения последующих задач.Потоки в пуле будут существовать до тех пор, пока он не будет явно отключен.

...