Может ли крюк отключения полагаться на другой поток? - PullRequest
0 голосов
/ 22 октября 2009

В методе ловушки завершения работы мне нужно отправить сообщение другому процессу о том, что он завершил работу. Мой текущий код обработки сообщений требует, чтобы сообщение было записано в очередь, эта очередь обрабатывается другим потоком и отправляется туда, куда оно направляется. В этом случае для записи в файл канала другим потоком.

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

Исполнение минимально. Он запустит около 15 строк кода + любое ожидание, необходимое для записи в файл, что также должно быть минимальным.

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

Из описания Javadoc addShutdownHook :

"Обратите внимание, что потоки демона будут продолжать работать во время последовательности выключения, , как и потоки, не являющиеся демонами, если отключение было инициировано путем вызова метода выхода ."

Учитывая это, я бы сказал, что можно с уверенностью предположить, что ваш поток все еще будет работать и что вы сможете общаться с ним. Единственное, против чего я хотел бы предупредить, это полагаться на то, что ваши отключающие хуки работают в детерминированном порядке.

0 голосов
/ 22 октября 2009

Похоже, вам нужен многоступенчатый процесс выключения. В многопоточной среде я бы не рассчитывал просто на оценку строк кода, которые необходимо выполнить, чтобы дать вам руководство по процедуре завершения работы ...

...