Demono gija yra žemo prioriteto fono gija, kuri netrukdo JVM išeiti, kai programa baigia vykdyti
- Demonų gijos veikia fone, kad palaikytų vartotojų gijas.
- JVM automatiškai išeina, kai baigiasi visos vartotojo (ne demono) gijos.
- Jie sukurti naudojant tą pačią Thread klasę, bet pažymėti kaip demonas naudojant setDaemon(true) metodą.
- Metodas setDaemon(true) turi būti iškviestas prieš pradedant giją.
- Įprasti pavyzdžiai yra šiukšlių surinkėjas ir baigiamasis siūlas.
Sintaksė
Javathread.setDaemon(true);
Naudojimo atvejai
- Šiukšlių surinkimas: „Java“ šiukšlių surinkėjas (GC) veikia kaip demono gija.
- Fono stebėjimas: Demono gijos gali stebėti programos komponentų išteklių arba jungčių būseną.
- Miško ruošos ir audito paslaugos: Demonų gijos gali būti naudojamos nuolatinei foninei veiklai registruoti.
- Valymo operacijos: „Daemon“ gijos gali periodiškai išvalyti laikinuosius failus, išleisti nepanaudotus išteklius arba išvalyti talpyklą.
- Planuoklio arba laikmačio užduotys: Fono planuotojai dažnai naudoja demonų gijas, kad suaktyvintų užduotis nustatytais intervalais.
Naudoti metodai
- void setDaemon (loginis įjungtas): Pažymi giją kaip demoną arba vartotojo giją. Turi būti iškviestas prieš start().
- loginis isDaemon(): Patikrina, ar gija yra demonas.
Demono gijos kūrimas
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(); } }
Išvestis
Daemon thread running... User thread running...
Daemon Thread elgesys
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...'); } }
Išvestis
Main (user) thread ends...
JVM baigiasi iš karto po to, kai baigiasi pagrindinė gija, nors demono gija vis dar veikia.
Svarbios pastabos
- Gija paveldi ją kuriančios gijos demono būseną.
- Metodas setDaemon(true) išmeta IllegalThreadStateException, jei iškviečiamas po start().
- Demonų gijos neturėtų būti naudojamos užduotims, kurias reikia atlikti, pvz., rašyti į failą arba atnaujinti duomenų bazę.
- JVM staigiai nutraukia visas demono gijas, neatlikdamas valymo operacijų.
Skirtumas tarp vartotojo gijos ir demono gijos
| Pagrindas | Vartotojo tema | Daemon Thread |
|---|---|---|
| Tikslas | Vykdo pagrindines programos užduotis | Atlieka fonines paslaugas |
| Gyvenimo ciklas | Išlaiko JVM gyvą, kol baigsis | Nutrūksta, kai baigiasi visos vartotojo gijos |
| Pirmenybė | Paprastai didesnis | Paprastai žemesnė |
| JVM išėjimas | JVM laukia pabaigos | JVM išeina, net jei veikia |
| Pavyzdžiai | Pagrindinių siūlų darbininkų siūlai | Šiukšlių rinktuvo foniniai monitoriai |