@tincap

Как перезапустить один поток в консоли?

Есть java программа, которую я запускаю через консоль. Она создает 4 потока, и каждый поток выводит на консоль свои данные. На выходе я вижу кучу строк из всех 4-х потоков. Иногда может произойти так, что в каком-то из потоков произойдет нечто такое, что требует перезапустить его. Есть ли какие-нибудь инструменты для работы с несколькими потоками? Потому что если я нажму Ctrl + C, то остановятся все потоки.
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
@nirvimel
Какие инструменты вы имеете в виду? Снаружи невозможно повлиять на ход выполнения программы. Обработка исключительных ситуаций должна быть предусмотрена в коде. Обычно для этого реализуют что-то типа планировщика (scheduler) в отдельном потоке, который регулярно опрашивает рабочие потоки потоки (worker) и если worker не успел ответить на запрос в течении определенного времени, он убивается и перезапускается. Общение между потоками идет через очереди ConcurrentLinkedQueue (иногда BlockingQueue, но обычно они используются не для опроса, а для пересылки потоков данных). worker в цикле опрашивает входящую очередь и отвечает на пинг через исходящую. Также неплохо завернуть весь worker в обработчик RuntimeException, в котором сигнализировать scheduler о произошедшим.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы