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.