Демон нишката е фонова нишка с нисък приоритет, която не пречи на JVM да излезе, когато програмата завърши изпълнението
- Демон нишките работят във фонов режим, за да поддържат потребителски нишки.
- JVM излиза автоматично, когато всички потребителски (не-демон) нишки завършат.
- Те се създават с помощта на същия клас Thread, но се маркират като демон с помощта на метода setDaemon(true).
- Методът setDaemon(true) трябва да бъде извикан преди нишката да започне.
- Често срещаните примери включват Garbage Collector и Finalizer Thread.
Синтаксис
Javathread.setDaemon(true);
Случаи на употреба
- Събиране на отпадъци: Garbage Collector (GC) в Java работи като демон нишка.
- Фоново наблюдение: Демон нишките могат да наблюдават състоянието на ресурсите или връзките на компонентите на приложението.
- Услуги за регистрация и одит: Демон нишките могат да се използват за непрекъснато регистриране на фонови дейности.
- Операции за почистване: Нишките на Daemon могат периодично да изчистват временни файлове, освобождавайки неизползвани ресурси или извършвайки почистване на кеша.
- Задачи за планиране или таймер: Планировчиците на заден план често използват нишки на демон, за да задействат задачи на фиксирани интервали.
Използвани методи
- void setDaemon (булева стойност на): Маркира нишка като демон или потребителска нишка. Трябва да се извика преди start().
- boolean isDaemon(): Проверява дали нишката е демон.
Създаване на Daemon Thread
Javapublic class DaemonExample extends Thread { public void run() { if (Thread.currentThread().isDaemon()) { System.out.println('Daemon thread running...'); } else { System.out.println('User thread running...'); } } public static void main(String[] args) { DaemonExample t1 = new DaemonExample(); DaemonExample t2 = new DaemonExample(); t1.setDaemon(true); // must be set before start() t1.start(); t2.start(); } }
Изход
Daemon thread running... User thread running...
Поведение на Daemon Thread
Javapublic class DaemonBehavior extends Thread { public void run() { while (true) { System.out.println('Daemon thread running...'); } } public static void main(String[] args) { DaemonBehavior t = new DaemonBehavior(); t.setDaemon(true); t.start(); System.out.println('Main (user) thread ends...'); } }
Изход
Main (user) thread ends...
JVM приключва веднага след приключване на основната нишка, въпреки че нишката демон все още работи.
Важни бележки
- Нишката наследява състоянието на демон на нишката, която я създава.
- Методът setDaemon(true) хвърля IllegalThreadStateException, ако бъде извикан след start().
- Нишките на Daemon не трябва да се използват за задачи, изискващи завършване, като писане във файл или актуализиране на база данни.
- JVM прекратява внезапно всички нишки на демон, без да извършва операции за почистване.
Разлика между потребителска нишка и демон нишка
| Основа | Потребителска тема | Daemon Thread |
|---|---|---|
| Цел | Изпълнява основните задачи на приложението | Извършва фонови услуги |
| Жизнен цикъл | Поддържа JVM жива, докато приключи | Прекратява, когато всички потребителски нишки завършат |
| Приоритет | Обикновено по-висока | Обикновено по-ниска |
| Изход от JVM | JVM чака завършване | JVM излиза, дори ако работи |
| Примери | Работни нишки на основната нишка | Фонови монитори за събирач на отпадъци |