Bevezetés a szál életciklusához a Java-ban
Egy szál az életciklus számos szakaszát megtapasztalja. Mint például egy szál jön a világba, elindul, fut és utána elmúlik. A következő ábra ismerteti a szál teljes életciklusát.
- A Thread Constructor egy szálat hoz létre egy új állapoton keresztül.
- A szál kezdeményezése a szálban elindítja a futtatható állapotot.
- A Java-menetrend-ütemező futtatja ezt a szálat, amikor a processzor megkapja.
- Amikor a szál blokkolt állapotba kerül, akkor ismét futni fog, mert visszatér futtatható állapotba.
- Ha a várakozási módszerre szálként hivatkoznak, akkor az állapot várakozásra kerül, akkor hamarosan futtatható állapotba kerül, miután az egész értesítésben értesítéssé válik, valamint az összes módszer értesítésére.
- A szál véget ér, ha a futási módszer leáll.
Mi az a szál?
A szál meghatározása az operációs rendszer szintjén történik. És a Java nyelv, valamint az összes többi nyelv használja, kihasználja az operációs rendszer által nyújtott szolgáltatást. A fejlesztő szempontjából a szál olyan utasítások halmaza, amelyekkel megírjuk az alkalmazásunkat, és bizonyos módon végrehajtjuk. Maga az alkalmazás több szálból is állhat. Különböző szálak futtathatók egyszerre. A JVM (Java virtuális gép) több szállal működik. Vannak szálak a szemétgyűjtéshez. Vannak szálak a Just in Time fordítóhoz és más műszaki szálakhoz.
A menet életciklusának állapota Java-ban
Az alábbiakban bemutatjuk a Java életciklusának különböző állapotait:
1. Új: Egy új szál elkezdi életciklusát az új állapotban. Ez a helyzet továbbra is fennáll, mielőtt a program megkezdi a szálat. Ezenkívül létrehozott szálként is ismert.
2. Futtatható: Miután egy nemrégiben született szál megkezdődhet, a szál futtathatóvá válik. Az ilyen állapotú szálakat úgy tekintik, hogy végrehajtják a folyamatot.
3. Várakozás: Időnként egy szál átmenet az állam körüli várakozás felé, még akkor is, ha a szál egy másik szálra vár egy tevékenység végrehajtására. A szálak csak akkor lépnek vissza a futtatható állapotba, ha egy további szál jelzi a várakozó szálat, hogy továbbra is teljesüljön.
4. Időzített várakozás: A futtatható szál könnyedén lecsökkenti az adott időzített várakozást, amíg az állapot megad egy bizonyos időintervallumot. Az ilyen állapotátmenetekkel rendelkező szálak visszatérnek a futtatható állapotba, miután a pont-intervallum lejár, vagy ha történik az az esemény, amely valóban vár.
5. Megszűnt: A futtatható szál a lezárt állapotba kerül, mert elvégzi a feladatát, vagy pedig megszűnik.
Hogyan hozhatunk létre szálat Java-ban?
A szálak létrehozásának alapvető módja a Java-ban a Runnable Pattern használata. Először létre kell hoznia a Runnable felület példányát, ami nagyon egyszerű; csak egy módszer valósítható meg. Akkor átadjuk ezt a példányt a szál osztály kivitelezőjének. És akkor csak meghívjuk a létrehozott szál-objektum start () módszerét, hogy elindítsunk egy új szálat, amely futtatni fogja a Futtatható objektumba csomagolt feladatot.
Tehát először hozzon létre egy futtatható példányt. Csak egy módszer valósítható meg, amelyet run () módszernek hívnak. Ezt a Java 7 mintázat teszi lehetővé, anonim osztály példányával. De lambda kifejezést is használhatunk a Runnable megvalósításához, mivel csak egy módszer van a Runnable felületen.
Hozzunk létre szálakat nagyon egyszerű példákra
Meg fogjuk vizsgálni, hogy mi lehet a baj egy olyan versenyfeltétel esetén, amely a szinkronizálatlan kóddal van, amelyet szinkronizálni kell, és szinkronizálás segítségével rögzítjük a kódot. Ez az első példa nagyon egyszerű, nagyon alapvető. Csak egy feladat létrehozásáról szól.
Kimenet:
A feladat a Runnable interfész példánya, nevezzük futtathatónak, és ezt a felületet lambda kifejezéssel valósíthatjuk meg. Ezt a feladatot egy új szálnak adják, és ennek a szálnak a keretében hajtják végre. Tehát ki fogjuk nyomtatni a szál nevét, amely ezt a feladatot futtatja. Futok benne. A Thread.currentThread () a szál osztály statikus módszere, amely visszaadja az aktuális feladatot futtató szálat. És csak a getName () -et kell meghívnunk ezen szál-objektumon, hogy visszaadjuk a szál nevét. Ezután egy szálpéldány létrehozása után t = új szál. A futtathatóság átadása paraméterként. Tehát ez a szál végrehajtja ezt a kóddarabot. És hogy elindítsam. t.start () ez a start () módszer, amelyet fel kell hívnunk. Azt is megtehetjük, hogy kifejezetten megnevezzük ezt a szálat az t.setName („Saját szál”) használatával. És most végrehajthatjuk ezt a kódot. Most a call () metódus helyett a run () metódust hívjuk, és ha ezt a kódot futtatjuk, akkor az a probléma, hogy a feladat helyesen hajtódik végre, de nem az általunk létrehozott szálat hajtják végre. A fő szálban hajtják végre, amely a fő módszert végrehajtó szál. Tehát ezt a run () módszert nem szabad meghívni, ha új szálat akarunk indítani.
Kimenet:
A szálak életciklusának módszerei a Java-ban
Az egyszerűen a szál által leírt módszereket a 4. táblázat tartalmazza.
Adattípusok | Menet módszer nevek |
Húr |
getName () Visszaadja ennek a szálnak a nevét |
int | szerezz prioritást ()
Visszaadja a szál prioritását |
logikai | életben van()
Teszteli, hogy ez a szál továbbra is fut-e |
üres | csatlakozik()
Várakozik ennek a szálnak a halálára (megszűnik) |
üres | fuss()
Amikor ezt a szálat egy egyedi Runnable objektum felhasználásával építették, akkor azt követően, amelyet általában a Runnable objektum futtatási módszerének hívnak; Ellenkező esetben, ez a módszer semmi esetre sem tér vissza. Amikor a szálosztály kibővíthető, a run () metódus túlterhelésre kerül az alosztály alatt, akkor egy overredden run () metódust hívnak. |
üres | setName ( karakterlánc neve )
Megváltoztatja a nevet ezzel a szállal, hogy összehasonlíthatóvá váljon az argumentum nevével. |
statikus semmis | alvás ( hosszú millis ) megszakítja / kivétel A jelenlegi teljesítő szálra pihentet a szükséges mennyiség milliszekundumban. |
statikus semmis | alvás ( hosszú millis, int nanos ) dob InterruptedException
Elvégzi, hogy a jelenleg működő szál aludjon (beszüntesse a végrehajtást) a szükséges milliszekundummennyiséghez, valamint az adott nanoszekundum-mennyiséghez. |
üres | Rajt()
Beindítja ezeket a szálakat a végrehajtás megkezdéséhez; a Java virtuális gép meghívja az adott szál futtatási módszerét. |
statikus semmis | hozam()
Beindítja a jelenlegi szálobjektumot, hogy röviden szüneteltesse és engedélyezze a további szálak végrehajtását. |
statikus szál | currentThread ()
Visszaadja a jelenleg futó szál objektum említését. |
Következtetés
- A szálak használatának megkezdése egyszerű, rendkívül nehéz megérteni.
- A menetbiztos módszereket tartalmazó osztályok megtervezése kihívást jelent.
- Olvassa: JavaDoc, hogy megkapja a java.lang.Thread osztályt
Ajánlott cikk
Ez egy útmutató a szál életciklusához a Java-ban. Itt megvitatjuk, mi a szál? és a szálak életciklusának különböző állapotai, valamint a szálak létrehozása a java-ban. A további javasolt cikkeken keresztül további információkat is megtudhat -
- Keretek a Java-ban
- Csillagminták Java-ban
- Merge Sort a Java alkalmazásban
- A legjobb Java fordítók
- Statikus módszer a PHP-ben