В настоящее время я работаю над демоном, который будет выполнять ОЧЕНЬ много разных задач. Он многопоточный и создается для обработки практически любых внутренних ошибок без сбоев. Ну, я дошел до того, что обработал запрос на отключение, и я не уверен, как мне это сделать.
У меня есть настройка ловушки отключения, и когда она вызывается, она устанавливает переменную, сообщающую основному циклу демона о прекращении работы. Проблема в том, что этот демон порождает несколько потоков, и они могут занять много времени. Например, один из этих потоков может конвертировать документ. Большинство из них будут быстрыми (я полагаю, менее 10 секунд), но будут темы, которые могут длиться более 10 минут.
То, о чем я сейчас думаю, - это когда отправлено сообщение о завершении работы, сделать цикл в течение примерно 5 секунд для ThreadGroup.activeCount () со сном 500 мс (или около того) (все эти потоки находятся в ThreadGroup ) и перед этим циклом я отправлю всем потокам уведомление о том, что был вызван запрос на отключение. Тогда им придется немедленно, независимо от того, что они делают, очистить и закрыть.
У кого-нибудь еще есть предложения? Меня интересует, что делает, например, демон MySQL, когда ему приказывают остановиться, он останавливается мгновенно. Что произойдет, если будет запущено 10 очень медленных запросов? Ожидание или просто конец? Я имею в виду, что серверы действительно быстрые, поэтому на самом деле не существует никаких операций, которые я не смог бы выполнить менее чем за секунду. Вы можете сделать много в 1000 мс в наши дни.
Спасибо