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