Dēmona pavediens ir zemas prioritātes fona pavediens, kas neliedz JVM iziet, kad programma pabeidz izpildi
- Dēmonu pavedieni darbojas fonā, lai atbalstītu lietotāju pavedienus.
- JVM automātiski iziet, kad ir pabeigti visi lietotāja (bez dēmona) pavedieni.
- Tie ir izveidoti, izmantojot to pašu Thread klasi, bet tiek atzīmēti kā dēmons, izmantojot metodi setDaemon(true).
- Metode setDaemon(true) ir jāizsauc pirms pavediena sākuma.
- Parastie piemēri ir atkritumu savācējs un Finalizer Thread.
Sintakse
Javathread.setDaemon(true);
Lietošanas gadījumi
- Atkritumu savākšana: Atkritumu savācējs (GC) Java darbojas kā dēmona pavediens.
- Fona uzraudzība: Dēmona pavedieni var pārraudzīt lietojumprogrammu komponentu resursu vai savienojumu stāvokli.
- Mežizstrādes un audita pakalpojumi: Dēmonu pavedienus var izmantot, lai nepārtraukti reģistrētu fona darbības.
- Tīrīšanas operācijas: Dēmona pavedieni var periodiski notīrīt pagaidu failus, lai atbrīvotu neizmantotos resursus vai veiktu kešatmiņas tīrīšanu.
- Plānotāja vai taimera uzdevumi: Fona plānotāji bieži izmanto dēmonu pavedienus, lai aktivizētu uzdevumus noteiktos intervālos.
Izmantotās metodes
- Void setDaemon (būla ir ieslēgta): Atzīmē pavedienu kā dēmonu vai lietotāja pavedienu. Jāizsauc pirms start().
- Būla isDaemon(): Pārbauda, vai pavediens ir dēmons.
Dēmona pavediena izveide
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(); } }
Izvade
Daemon thread running... User thread running...
Daemon Thread uzvedība
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...'); } }
Izvade
Main (user) thread ends...
JVM beidzas uzreiz pēc galvenā pavediena pabeigšanas, lai gan dēmona pavediens joprojām darbojas.
Svarīgas piezīmes
- Pavediens manto tā pavediena dēmona statusu, kas to izveido.
- Metode setDaemon(true) izmet IllegalThreadStateException, ja tiek izsaukta pēc start().
- Dēmonu pavedienus nevajadzētu izmantot uzdevumiem, kas jāpabeidz, piemēram, ierakstīšanai failā vai datu bāzes atjaunināšanai.
- JVM pēkšņi pārtrauc visus dēmonu pavedienus, neveicot tīrīšanas darbības.
Atšķirība starp lietotāja pavedienu un dēmona pavedienu
| Pamats | Lietotāja pavediens | Dēmona pavediens |
|---|---|---|
| Mērķis | Izpilda galvenos lietojumprogrammu uzdevumus | Veic fona pakalpojumus |
| Dzīves cikls | Saglabā JVM dzīvu līdz beigām | Tiek pārtraukta, kad visi lietotāja pavedieni ir pabeigti |
| Prioritāte | Parasti augstāks | Parasti zemāks |
| JVM izeja | JVM gaida pabeigšanu | JVM iziet, pat ja darbojas |
| Piemēri | Galvenās vītnes strādnieku pavedieni | Atkritumu savācēja fona monitori |