Завершение основного потока без обеспечения завершения потоков, порожденных им

#java #multithreading #thread-safety

#java #многопоточность #потокобезопасность

Вопрос:

Я реализовал многопоточную программу, которая включает в себя создание потока для каждого пользователя и выполнение некоторых второстепенных действий (никаких исчерпывающих процессов, таких как подключение к базе данных).Основной поток выполняется бесконечно, и его завершение обрабатывается с помощью мониторинга активности создания файла. Мой вопрос в том, можно ли сразу завершить основной поток, не дожидаясь завершения потоков? (предположение, что потоки завершатся сами по себе (!), может быть ложным предположением).

Ответ №1:

Конечно.

Основной поток — это всего лишь один поток среди других, и его завершение не повлияет на другие потоки (если только вы не используете System.exit() для остановки потока …).

Основной поток — это всего лишь первый поток *), который был запущен, но у него нет дополнительных или скрытых функций.


*) для простоты — jvm, возможно, запустила некоторые внутренние потоки перед main — но в приложении нет кода для этих потоков

Ответ №2:

Да, смысл потоков в том, что они выполняются независимо.

Это имело бы значение, только если бы ваши клиентские потоки были запущены как потоки демонов и main являются единственным потоком, не являющимся демоном. (В этом случае приложение завершит работу при его остановке)

Ответ №3:

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

Обратите внимание, что на самом деле вы не «завершаете» основной поток, вместо этого просто позволяете ему завершить свой метод run. И это нормально.