2016-06-29 4 views
0

После исследования сети я не смог найти ответ, поэтому я надеюсь, что кто-то здесь может.служба-исполнитель с несколькими задачами по каждой теме

У меня работает служба-исполнитель с несколькими потоками (скажем, 2 для упрощения). В каждом потоке я представляю runnable, в котором есть много тестов. Эти тесты используют программное обеспечение на моем компьютере.

Мой сценарий заключается в том, что если тест не выполняется в любом потоке - мне нужно перезагрузить программное обеспечение на моем компьютере.

Итак, если тест по потоку теперь нужно перезапустить программное обеспечение - мне нужно приостановить работу второго потока (все потоки в основном требуют приостановки, включая поток один).

Во втором потоке тест может быть использован с программным обеспечением - так что я хочу закончить выполнение текущего теста - приостановить следующие тесты в строке/самом потоке - перезапустить программное обеспечение - и продолжить работу над обоими (все) потоками ,

Вещи, которые я пробовал и не совсем уверен, как их реализовать: все предложения от Джона из этих видео: Advanced Java: Multi-threading.

Заранее за вашу помощь.

+0

Итак, вы хотите завершить shutdownNow() пул потоков, когда какая-либо задача не удалась? –

ответ

0

Предлагаю вам взглянуть на ScheduledThreadPoolExecutor.

Вы можете реализовать экземпляр singleton, который сохранит статус (пауза/запуск) для вашего программного обеспечения (позаботьтесь о параллелизме), и для каждого вашего теста Runnable вы проверите состояние в начале выполнение. Если состояние приостановлено, перепланируйте задачу с небольшой задержкой (оцените время перезапуска вашего программного обеспечения). Это означает, что вы обязательно должны передать ServiceExecutor входной параметр конструктора вашей задачи (и сохранить его как переменную).

+0

OP уже использует ExecutoreService, можете ли вы сказать, как использование запланированного будет иметь значение? –

+0

вы должны использовать 'schedule' для задачи вместо' execute', чтобы запустить задачу для второго и последующих времен. Это невозможно с любым «ExecutorService». –

+0

Согласен, вам нужно использовать scheduleAt ... для выполнения повторяющихся задач. Я не уверен, что об этом спрашивал ОП. –

Смежные вопросы