Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > выход из программы в побочной нити


Автор: Hogan 14.5.2007, 02:39
Подскажите, как можно завершить приложение, находясь в одной из побочных нитей. Не пойму,как толком  флаг применить.

Автор: batigoal 14.5.2007, 08:24
Я полагаю, System.exit(0) прервёт выполнение программы из любого потока, но о кошерности такого подхода можно спорить.

Другой вариант - в главном потоке циклически проверять какой-нибудь флаг, который и изменять из "побочного". Т.е. главный поток представляет собой цикл while(flag).

Автор: chief39 14.5.2007, 10:16
Лучше реализовать одну кошерную точку выхода.
Например, в главном треде, реализовать механизм, который в любой ситуации способен разрулить все нити и правильно их завершить, а потом и убиться апстену самостоятельно.

Все остальные нити должны идти только через этот выход.

Способ уведомления  - это уже другой выбор:
Можно флаг как batigoal грит - нить говорит что "всё, хватит, наработалась" и не только она одна может так сказать - тогда главная(или спец. контролирующая) нить осматривает всех пациентов на предмет нежелания работать и выходит из системы всё корректно завершив или забивает на такое пожелание поднити(рано ещё, сиди тихо.) Процесс выхода реализован в одной точке и, гарантированно правильный, а не свой у каждого.

А можно в каждую поднить передавать ссылку на главную(или контролирующую). Тогда это будет не поллинг постоянный, а прямая точка входа для любой нити, сообщить контроллирующей - "эй, начальнег, пора бы и на перекур". Но, опять-таки, завершения и выходы все делает главная(или ответственная за координацию всех) нить

Автор: diablero 15.5.2007, 19:42
 shutdown-ловушку поставь и коректно сможешь обрабатывать выход из программы.
Прочитать можно http://javaportal.ru/java/articles/noclosejava.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)