Daemon niti u Javi

1. Pregled

U ovom ćemo kratkom članku pogledati demonske niti u Javi i vidjeti za što se mogu koristiti. Također ćemo objasniti razliku između demonskih niti od korisničkih niti.

2. Razlika između demona i korisničkih niti

Java nudi dvije vrste niti: korisničke niti i demonske niti.

Korisničke niti su niti visokog prioriteta. JVM će pričekati da bilo koja korisnička nit dovrši svoj zadatak prije nego što je završi.

S druge strane, daemon niti su niti niskog prioriteta čija je jedina uloga pružanje usluga korisničkim nitima.

Budući da su demonske niti namijenjene opsluživanju korisničkih niti i potrebne su samo dok se korisničke niti izvode, neće spriječiti JVM da izađe nakon što sve korisničke niti dovrše svoje izvršavanje.

Zbog toga beskonačne petlje, koje obično postoje u demonovskim nitima, neće stvarati probleme jer bilo koji kod, uključujući konačno blokovi, neće se izvršiti nakon što sve korisničke niti dovrše svoje izvršavanje. Zbog ovog razloga, niti demona ne preporučuju se za I / O zadatke.

Međutim, postoje iznimke od ovog pravila. Loše dizajniran kôd u demonim nitima može spriječiti izlazak JVM-a. Primjerice, pozivanje Thread.join () na pokrenutom daemon niti može blokirati isključivanje aplikacije.

3. Uporaba Daemon niti

Daemonove niti korisne su za pozadinske zadatke kao što su prikupljanje smeća, oslobađanje memorije nekorištenih objekata i uklanjanje neželjenih unosa iz predmemorije. Većina JVM niti su daemon niti.

4. Stvaranje demonske niti

Da bismo postavili nit kao nit demona, sve što trebamo je nazvati Thread.setDaemon (). U ovom ćemo primjeru koristiti NewThread klasa koja proširuje Nit razred:

NewThread daemonThread = novi NewThread (); daemonThread.setDaemon (istina); daemonThread.start ();

Bilo koja nit nasljeđuje status demona niti koja ju je stvorila. Budući da je glavna nit korisnička nit, svaka nit koja je stvorena unutar glavne metode prema zadanim je postavkama korisnička nit.

Metoda setDaemon () može se nazvati samo nakon Nit objekt je stvoren i nit nije pokrenut. Pokušaj poziva setDaemon () dok nit radi, izbacit će IllegalThreadStateException:

@Test (očekuje se = IllegalThreadStateException.class) javna praznina kadaSetDaemonWhileRunning_thenIllegalThreadStateException () {NewThread daemonThread = nova NewThread (); daemonThread.start (); daemonThread.setDaemon (istina); }

5. Provjera je li nit Daemon nit

Na kraju, da bismo provjerili je li nit daemon nit, možemo jednostavno pozvati metodu isDaemon ():

@Test public void whenCallIsDaemon_thenCorrect () {NewThread daemonThread = new NewThread (); NewThread userThread = novo NewThread (); daemonThread.setDaemon (istina); daemonThread.start (); userThread.start (); assertTrue (daemonThread.isDaemon ()); assertFalse (userThread.isDaemon ()); }

6. Zaključak

U ovom smo brzom vodiču vidjeli što su demonske niti i za što se mogu koristiti u nekoliko praktičnih scenarija.

Kao i uvijek, puna verzija koda dostupna je na GitHub-u.