#java #multithreading #thread-safety
#java #многопоточность #потокобезопасность
Вопрос:
Я реализовал многопоточную программу, которая включает в себя создание потока для каждого пользователя и выполнение некоторых второстепенных действий (никаких исчерпывающих процессов, таких как подключение к базе данных).Основной поток выполняется бесконечно, и его завершение обрабатывается с помощью мониторинга активности создания файла. Мой вопрос в том, можно ли сразу завершить основной поток, не дожидаясь завершения потоков? (предположение, что потоки завершатся сами по себе (!), может быть ложным предположением).
Ответ №1:
Конечно.
Основной поток — это всего лишь один поток среди других, и его завершение не повлияет на другие потоки (если только вы не используете System.exit()
для остановки потока …).
Основной поток — это всего лишь первый поток *), который был запущен, но у него нет дополнительных или скрытых функций.
*) для простоты — jvm, возможно, запустила некоторые внутренние потоки перед main — но в приложении нет кода для этих потоков
Ответ №2:
Да, смысл потоков в том, что они выполняются независимо.
Это имело бы значение, только если бы ваши клиентские потоки были запущены как потоки демонов и main
являются единственным потоком, не являющимся демоном. (В этом случае приложение завершит работу при его остановке)
Ответ №3:
Да, и обычно это имеет место в большинстве приложений. Основной поток обычно повторно запускается для инициализации системы, и после этого он может спокойно умереть.
Обратите внимание, что на самом деле вы не «завершаете» основной поток, вместо этого просто позволяете ему завершить свой метод run. И это нормально.