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

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

Работа обычной программы, состоящей из одной нити, завершается вместе с работой главной нити. После этого 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-машины, который позволяет получать информацию о нити и немного управлять ей.

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