Jelenlegi hely

Utolsó változások

15.2. Helyettesítő típus

Ahogy körbejárjuk a printAll metódus első változata által felvetett kérdést, leszögezhetjük, hogy a printAll paramétere egy gyűjtemény, melynek elemi típusa lehet bármi, amit Collection<?> formában leírhatunk:

15. Általános programozás

Az általános (generikus) programozás típusparaméterek segítségével teszi lehetővé, hogy osztályokat, interfészeket hozhassunk létre úgy, hogy bizonyos paraméterek típusait a példányosításkor dönthessük el.

18. Kivételkezelés

A kivétel a „kivételes esemény” kifejezés rövidítése.

Definíció: A kivétel egy olyan esemény, amely a program végrehajtásakor keletkezik, megszakítva az utasítások végrehajtásának normális folyamatát.

19.2. Szálak példányosítása

Ha a fenti megközelítés nem alkalmas a feladat ellátására, akkor saját szál példányosítása lehet a megoldás. Ez a fejezet elmagyarázza, hogyan lehet a szál run metódusát egyénivé alakítani.

A run metódusban van, amit a szál ténylegesen csinál, ennek a kódja határozza meg a futást. A szál run metódussal mindent meg lehet tenni, amit a Java programnyelvben le lehet írni. Pl.: prímszámokkal való számolás, rendezés, animáció megjelenítés.

19.2.1 Thread leszármazott és a run felülírása

Az első lépés a szálak testreszabásánál, hogy Thread osztály leszármazottját létrehozzuk, és az üres run metódusát felülírjuk, hogy csináljon is valamit. Nézzük meg a SimpleThread osztályt, amely ezt teszi:

19.4. Ellenőrző kérdések

Melyik az az interfész, amelyet megvalósítva több szálú programfutás érhető el?

  • Runnable
  • Run
  • Threadable
  • Thread
  • Executable

Mi annak a metódusnak a neve, amellyel a külön programszál futását kezdeményezni tudjuk?

  • init
  • start
  • run
  • resume
  • sleep

Mi annak a metódusnak a neve, amellyel a programszál futását le tudjuk állítani?

(Minden helyes választ jelöljön meg!)

19.3.3 Programszál státusz tesztelése

Az 5.0-ás verzióban került bevezetésre a Thread.getState metódus. Mikor ez kerül meghívásra, az alábbi Thread.State értékek valamelyike tér vissza:

19.3.2 Programszál leállítása

Habár a Thread osztályban rendelkezésre áll a stop metódus, ezen metódus alkalmazása nem javallott, mert nem biztonságos, pl. adatvesztés léphet fel. Egy szálnak inkább saját magának kell befejezni a futását úgy, hogy a run metódusa természetesen áll le. Például a while ciklus a run metódusban egy véges ciklus 100-szor fut le, majd kilép:

19.3.1 Programszál nem futtatható állapotba állítása

Egy szál akkor válik nem futtathatóvá, ha a lenti események közül bármelyik is bekövetkezik:

  • Meghívásra kerül a sleep metódusa.
  • A szál meghívja a wait metódust, hogy az várjon egy bizonyos feltétel teljesülésére.
  • A szál blokkolt egy I/O művelet miatt.

A clockThread a Clock szálon belül akkor kerül nem futtatható állapotba, mikor a futás metódus meghívja a sleep-et a jelenlegi szálban:

19.3. Programszál életciklusa

A következő ábra bemutatja a szál különböző állapotait, amibe élete során tud kerülni, és illusztrálja, hogy melyik metódusok meghívása okozza az átmenetet egy másik fázisba. Az ábra nem egy teljes állapotdiagram, inkább csak egy áttekintés a szál életének fontosabb és egyszerűbb oldalairól. A továbbiakban is a Clock példát használjuk, hogy bemutassuk a szál életciklusát különböző szakaszaiban.

Programszál életciklusa

Oldalak