Что верно про daemon-потоки?
JVM завершается, когда остались только daemon-потоки; они обрываются без выполнения finally. Флаг ставится до start(), иначе IllegalThreadStateException.
- На приоритет daemon не влияет
- Не годится для работы, которую нужно довести до конца: запись файла, отправка
- Потоки, созданные daemon-потоком, тоже daemon по умолчанию
А ещё Корректное завершение — shutdown hook и остановка пулов
Подробно
Флаг daemon влияет только на условие завершения JVM, а не на приоритет: приоритет задаётся отдельно через setPriority. Ключевое практическое следствие — daemon-поток нельзя использовать для работы, которую обязательно нужно довести до конца: при выходе JVM он обрывается, finally и try-with-resources могут не отработать, а частично записанный файл останется битым. Для фоновых задач с обязательным завершением используют обычные потоки и явный shutdown.
Что хотят услышать
- Влияние на завершение JVM.
- Когда ставить флаг.
- Почему нельзя доверять daemon важную работу.
Частые ошибки
- Писать в daemon-потоке данные, которые нельзя потерять.
- Путать daemon-флаг с приоритетом потока.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓JVM завершается, когда остаются только daemon-потоки
- ✓setDaemon нужно вызвать до start(), иначе будет IllegalThreadStateException
- ✗Daemon-поток имеет более низкий приоритет планирования и всегда вытесняется обычными потоками
- ✓При завершении JVM daemon-поток обрывается, и его блоки finally могут не выполниться
Что спросят дальше
- Какие потоки в JVM являются daemon по умолчанию?
- Как корректно дождаться завершения фоновой работы при остановке приложения?
Разбор темы
- Потоки: создание, состояния и отмена
Thread и Runnable, стоимость платформенных потоков, состояния жизненного цикла, кооперативное прерывание и daemon-потоки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.