VIII. Szálak és animáció



Hasonló dokumentumok
PROBLÉMAFELVETÉS. Programozás III. Mit csinál? SZÁLAK + MULTIMÉDIA

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Programozási nyelvek és módszerek Java Thread-ek

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Programozás III GRAFIKA RAJZOLÁS SWING FELÜLETEN RAJZOLÁS GRAFIKA HASZNÁLATA. Rajzolni az awt csomag Graphics osztályának metódusaival tudunk.

PHP5 Új generáció (2. rész)


Programozási technológia 2.


ű Ö ű ű Ú Ú ű



Szoftvertechnológia alapjai Java előadások


Java felhasználói felület

Párhuzamosság. Java a párhuzamosítást több féle képpen támogatja.

VII. Appletek, grafika


OPERÁCIÓS RENDSZEREK II GYAKORLAT

Előadás_#06. Előadás_06-1 -

1. Befektetési alapok 1

Emlékeztetı a Pest Megyei Orvosi Kamara február

Ha a gyógyítás nem mőködik

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )


Objektumorientált programozás C# nyelven III.





Operációs rendszerek. Holtpont



Ö




Hajókázna-e ma Vedres István a Tiszán? dr. Rigó Mihály okl. erdımérnök okl. építımérnök


Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése








Műhiba kommunikációt, avagy ha gáncsot vetnek, nem muszáj elesni



2. fejezet Hálózati szoftver

int azt az elõzõ részbõl megtudtuk, a rétegeknek az a feladatuk, hogy valamiféle feladatot végezzenek


ÚJFEHÉRTÓ VÁROS ÖNKORMÁNYZATA 18/2012. (VII. 26.) önkormányzati rendelete. a pénzben és természetben nyújtott szociális ellátások helyi szabályairól


TST kapcsoló. működésének megértését segítő ábrasorok. Készítette: Balambér Dávid

Sugárkövetési algoritmusok (2. rész)


Művészeti Szakközépiskolák Szövetsége (MŰ-SZA)

14. szám 122. évfolyam április 13. TARTALOM

Nyíregyházi Főiskola Matematika és Informatika Intézete. Holtpont (Deadlock) Alapfogalmak, példák, ábrázolás. Biztonságos és nem biztonságos állapot

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.


WINDOWS XP - A GRAFIKUS FELÜLET KEZELÉSE


Windows hálózati adminisztráció

Rendszerváltásunk mérlege. Hazánk felzárkózási esélyei és a stratégiai gondolkodás meghonosítása a társadalom- és gazdaságpolitika formálásában



Követelmény, projekt, funkcionalitás 41 CSK 1






Szolgáltatási szerzıdés

Operációsrendszerek. 2. elıadás. Standard ismeretek II.

III/1. Kisfeszültségű vezetékméretezés általános szempontjai (feszültségesés, teljesítményveszteség fogalma, méretezésben szokásos értékei.





A Budapesti Békéltető Testület összefoglalója az elektronikus hírközlési szolgáltatásokat érintő jelentősebb változásokról


ÜZLETI TERV év

26. Bosch Szarvasűzők Részletes versenyszabályok

30 / (XII. 15.) RENDELETE





Adatstruktúrák, algoritmusok, objektumok


Concurrency in Swing

VirtualBox, Debian telepítés


Magas szintű programozási nyelvek 2 Előadás jegyzet



JEGYZİKÖNYV. Jelen vannak:

Átírás:

VIII. Szálak és animáció 1. Bevezetés A mai korszerő operációs rendszerek multiuser-multitask rendszerek. Tehát az operációs rendszer egyszerre több feladattal is foglalkozik. Gondoljunk csak arra, hogy amikor elkezdünk egy cd grabbelést akkor mellette még lehetıségünk van internetezni stb. Ez persze nem azt jelenti, hogy a processzor egyszerre több mőveletet el tud végezni, pusztán annyit jelent, hogy több feladattal foglalkozik úgy, hogy bizonyos stratégia szerint minden feladattal foglalkozik egy kicsit. Ezt a stratégiát nevezzük ütemezésnek, ami sok paramétertıl függhet (pl.: prioritás), de ezzel most nem kívánunk foglalkozni. Az ütemezés mondja meg, hogy a párhuzamosan futó folyamatok közül éppen melyik kapja meg a vezérlést. Természetesen ez a körforgás nagyon gyorsan megy, így a kívülálló felhasználónak úgy tőnik, hogy a programjai párhuzamosan, egyszerre mőködnek. Programjaink írásakor is lehetıségünk van a fent említett elvek használatára. Ezt a programozási technikát nevezzük többszálú programozásnak. 2. Többszálú programozás Java-ban 2.1. A programszál fogalma A programszál (thread) hasonlít az operációs rendszerben futó folyamatra: ı is csak idınként kapja meg a vezérlést. Az alábbi ábrán az is látható, hogy a folyamatok szálakból állnak. Amikor egy folyamat fut, akkor az ı szálai között oszlik meg a vezérlés. PTE-PMMK oktatási segédanyag 1

A programszál valójában egy utasítássorozat, amely valahol elkezdıdik, és valahol befejezıdik. Az ütemezést az ún. szálütemezı végzi. 2.2. A programszál állapotai A programszál megszületik, mőködik és meghal. Születésétıl a haláláig a következı állapotokba juthat: Új (new) : a szál megszületésekor ebbe az állapotba kerül amíg el nem indítják Futtatható (runnable) : A szál akkor futtatható, ha elindították és még él. Alállapotai a következık: o Futó (run) : a szál aktív, legfeljebb CPU-ra vár o Blokkolt (suspended) : ha valami akadályozza a szál futását vagy Alvó (sleep) : a szálat el lehet altatni valamennyi idıre. Ha ez az idıtartam letelik, akkor felébred és fut tovább Várakozó (wait): A szál addig vár, amíg fel nem ébresztik (notify). Ha jön az ébresztés, akkor a programszál tovább fut. Halott (dead) : egy szál halott, ha befejezte futását (a run végetért) vagy meghívtuk a stop() metódust 2.3. Java programszál létrehozása A Java-ban a programszál is egy objektum; osztálya a Thread osztály leszármazottja. A Thread osztály a java.lang csomag része, ezért importálásáról nem kell külön gondoskodnunk. Szálakat kétféle módon hozhatunk létre: (1) a Thread osztály kiterjesztésével (2) vagy a Runnable interfész implementálásával (tudjuk, hogy Java-ban többszörös öröklıdés nem lehetséges. Ha appletekben szeretnénk szálakat használni, akkor a Thread osztály kiterjesztése nem PTE-PMMK oktatási segédanyag 2

járható ıt, mivel egy applet az Applet osztály kiterjesztésével jön létre. Ekkor használható a Runnable interfész implementálása) (1) Ha a Thread osztály kiterjesztésével létrehozott osztályunkat példányosítjuk, akkor kapunk egy szálat, de ez még nem fog futni. A futtatáshoz meg kell hívnunk a Thread osztályból örökölt start() metódust. Ez inicializálja a szálat és elindítja annak run() metódusát. A run() metódus a szál fıprogramja, itt kap helyet az összes olyan mővelet, amit a szálnak el kell végeznie. Tehát összefoglalva azt mondhatjuk, hogy szál programozásakor át kell írnunk a run() metódust (az alapértelmezett run() metódus nem csinál semmit). (2) A Runnable interfész egyetlen metódust definiál a run() metódust. Ebben az esetben ennek a metódusnak az implementálása a feladatunk. 2.4. Példa programszálra Hozzunk létre 2 szálat és írjuk ki, hogy éppen melyik szál mőködik. Figyeljük meg a két megoldás közötti különbségeket. 2.4.1. Megoldás az (1) módszerrel PTE-PMMK oktatási segédanyag 3

2.4.2. Megoldás az (2) módszerrel 2.5. A Thread osztály további fontos metódusai 2.5.1. start() Elindítja a programszálat. Meghívja a run() metódust. 2.5.2. sleep() A sleep() metódus segítségével egy szálat el lehet altatni a paraméterként megadott ezredmásodpercig. Például a Thread.sleep(1000) 1 másodpercre elaltatja a szálat. 2.5.3. isalive() Visszaadja, hogy a szál élı-e. Egy szál akkor élı, ha elindították és még nem halott. 2.5.4. currentthread() Visszaadja az éppen futó szálobjektumot. 2.5.5. getname() Visszaadja az éppen futó szálobjektum nevét. PTE-PMMK oktatási segédanyag 4

2.6. Szálak szinkronizációja Egy objektumhoz több programszál is hozzáférhet. Ilyenkor szükség lehet arra, hogy az egyik programszál bevárja a másikat. Erre szolgálnak a wait és notify metódusok. Az a szál, amelyik meghívja a wait metódust, blokkolódik, és addig vár, amíg egy bizonyos feltétel nem teljesül. Amikor jelzést kap, hogy újra futhat, megpróbálja folytatni a futást. A notify metódus szolgál arra, hogy egy várakozó szálat tovább engedjünk. Amikor a várakozó szál megkapja az üzenetet, megpróbál továbbhaladni. Néha szükség lehet arra, hogy az összes várakozó szál feléledjen. Erre szolgál a notifyall metódus. 3. Animáció Appletek esetén az animáció a paint() és a repaint() metódusok hívásával valósítható meg. A szálak pedig hasznos segítıtársak lehetnek az animációk megírásában. Az animációk esetén fontos szerepet kap a sleep() metódus is, ugyanis az emberi szemnek felfogható sebességgel szeretnénk megjeleníteni a grafikáinkat. PTE-PMMK oktatási segédanyag 5