JavaRush /Курсы /Java Multithreading /Все нюансы создания и запуска новой нити, демоны

Все нюансы создания и запуска новой нити, демоны

Java Multithreading
5 уровень , 4 лекция
Открыта

— Вот тебе новая и интересная тема.

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

Работа обычной программы, состоящей из одной нити, завершается вместе с работой главной нити. После этого Java-машина освобождает память программы.

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

Так вот, в больших программах часто есть так называемые «служебные процессы» — это нити, работа которых состоит в обслуживании других частей программы. Сами по себе они не нужны. Например: процесс удаления неиспользуемых объектов (сборка мусора), логирование состояния памяти и ошибок, различные отчеты о текущем состоянии программы и т.д. и т.п.

Такие служебные процессы нужны, когда программа что-то делает, но не нужны сами по себе.

— Да, я это понял.

— Java позволяет запустить нить в «режиме демона» (daemon). Работа такой нити ничем не отличается от других, но если в программе все обычные нити завершили работу, но остались только нити-демоны — Java-машина завершит программу.

— Т.е. мы объявляем нить «служебной», и она просто не учитывается при закрытии программы и все?

— Э-э-э. Ну, ты и выдал – кратко и по существу. Собственно, я это и хотела тебе сказать.

— Краткость – сестра таланта. А талантливые роботы – талантливы во всем.

— Есть вопросы?

— Что нужно, чтобы запустить нить в режиме демона? Унаследоваться от какой-нибудь DaemonThread?

— Нет, все гораздо проще – у класса Thread есть метод setDaemon(boolean), надо передать в него true и все. Только вызвать его нужно до вызова метода start(), пока реальная нить не создана. Поменять тип уже запущенной нити невозможно.

Пример:
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();

— И это все?

— Да.

Хочу еще раз обратить твое внимание на процесс создания и запуска нити.

Когда мы создаем объект типа Thread, нить при этом еще не создается. Thread – это не нить, нить создаст сама Java-машина, когда будет вызван метод start(). А Thread — это специальный объект Java-машины, который позволяет получать информацию о нити и немного управлять ей.

— Ясно. Спасибо, Элли.

Комментарии (121)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
27 июля 2025
Для того, что бы проверить, является ли поток "Демоном", можно вызвать его метод boolean isDeamon();
Kirill Уровень 46
16 октября 2024
Lingua latina non penis canina
Anonymous #3326131 Уровень 51
22 июля 2024
Что за тигр LoggerThread??
SomeBody098 Уровень 51
25 июля 2024
просто класс унаследованный от Thread
Long_byte Уровень 43
2 июня 2024
Когда мы создаем объект типа Thread, нить при этом еще не создается. Thread – это не нить, нить создаст сама Java-машина, когда будет вызван метод start(). А Thread — это специальный объект Java-машины, который позволяет получать информацию о нити и немного управлять ей.
20 сентября 2024
Этого действительно не хватает в лекции. Спасибо!
Kirill Уровень 46
16 октября 2024
Об этом как раз ясно говорится в лекции.
jo Уровень 35
19 июля 2023
я обожаю этот курс, сначала тебе дают задание, а через 10 уровней рассказывают о работе и тонкости)
Lafaed Уровень 36
5 апреля 2023

//  а так получится ?
Thread thread = (new LoggerThread()).setDaemon(true);
thread.start();
Lo Уровень 35 Expert
9 декабря 2023
Получится,суть то одна и та же)
Kirill Уровень 46
16 октября 2024
Не получится - выражение синтаксически не верное. Согласно приоритету операторов сперва выполнится метод setDaemon(), у которого возвращаемый тип void. И только после этого произойдет попытка присвоения переменной thread результата вызова метода setDaemon(). Вот на этом этапе и возникнет ошибка компиляции.
Денис Уровень 51
31 марта 2023
Ayzat Gazimov Уровень 42
13 февраля 2023
Amcıgıma koydum! Orospu cocugu!
Dimash Уровень 1
27 января 2023
Aut non tentaris, aut perfice — Или не берись, или доводи до конца.
Ренат Уровень 39
11 июля 2022
Labor omnia vincit! — Труд побеждает всё!
Сергей Смирнов Уровень 36
23 августа 2022
Bona dicta — Поучительные слова
Kurama Уровень 50
8 ноября 2022
Feci quod potui, faciant meliora potentes - Я сделал, что мог, пусть те, кто сможет, сделают лучше (В противовес вашим словам)