Daemon szálak Java-ban

1. Áttekintés

Ebben a rövid cikkben megnézzük a Java démonszálait, és megnézhetjük, mire használhatók. Megmagyarázzuk a démon szálak és a felhasználói szálak közötti különbséget is.

2. Különbség a démon és a felhasználói szálak között

A Java kétféle szálat kínál: felhasználói szálakat és démon szálakat.

A felhasználói szálak kiemelt fontosságú szálak. A JVM megvárja, amíg bármely felhasználói szál befejezi a feladatát, mielőtt leállítaná.

Másrészről, A démon szálak alacsony prioritású szálak, amelyek egyetlen szerepe a felhasználói szálak szolgáltatásainak biztosítása.

Mivel a démonszálak a felhasználói szálak kiszolgálására szolgálnak, és csak a felhasználói szálak futásakor szükségesek, nem akadályozzák meg a JVM-et abban, hogy az összes felhasználói szál befejezése után befejeződjön.

Ezért a végtelen ciklusok, amelyek általában a démon szálakban léteznek, nem okoznak problémát, mert bármelyik kód, beleértve a végül blokkok, nem kerülnek végrehajtásra, ha az összes felhasználói szál befejezte a végrehajtást. Emiatt, a démon szálak nem ajánlottak az I / O feladatokhoz.

Vannak azonban kivételek e szabály alól. A rosszul megtervezett kód a démonszálakban megakadályozhatja a JVM kilépését. Például hívás Thread.join () futó démonszálon blokkolhatja az alkalmazás leállítását.

3. A démonszálak felhasználása

A démonszálak hasznosak olyan háttér-feladatokhoz, mint például a szemétgyűjtés, a fel nem használt objektumok memóriájának felszabadítása és a nem kívánt bejegyzések eltávolítása a gyorsítótárból. A legtöbb JVM szál démon szál.

4. Démonszál létrehozása

Ahhoz, hogy egy szálat démonszálnak állítsunk be, csak annyit kell tennünk, hogy felhívjuk Thread.setDaemon (). Ebben a példában a Új téma osztály, amely kiterjeszti a cérna osztály:

NewThread daemonThread = new NewThread (); daemonThread.setDaemon (true); daemonThread.start ();

Bármelyik szál örökli a démon állapotát annak a szálnak, amely létrehozta. Mivel a fő szál felhasználói szál, a fő metóduson belül létrehozott bármely szál alapértelmezés szerint felhasználói szál.

A módszer, a metódus setDaemon () csak a. után hívható cérna objektum létrehozva, és a szál nem indult el. Hívási kísérlet setDaemon () miközben egy szál fut, egy IllegalThreadStateException:

@Test (várható = IllegalThreadStateException.class) public void whenSetDaemonWhileRunning_thenIllegalThreadStateException () {NewThread daemonThread = new NewThread (); daemonThread.start (); daemonThread.setDaemon (true); }

5. Annak ellenőrzése, hogy egy szál démonszál-e

Végül annak ellenőrzéséhez, hogy egy szál démonszál, egyszerűen meghívhatjuk a metódust isDaemon ():

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

6. Következtetés

Ebben a gyors bemutatóban megnéztük, hogy melyek a démonszálak, és mire használhatók fel néhány gyakorlati esetben.

Mint mindig, a kód teljes verziója elérhető a GitHubon.