— Ось тобі нова та цікава тема.

Виявляється, нитки можна запускати в різних режимах.

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

— Зрозуміло. Дякую, Еллі.