Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt2 Mai gyakorlat Threads – Szálak Process vs szál Szálkezelési módok Szál definiálása Szemafor és monitor Mutual Exclusion és programelemek
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt3 Process vs szál Time slicing mulitask megvalósítása: időosztásos os-ek, vagy több processzor/mag/gép (PVM) Processeknek és szálaknak is van prioritása Java: 10 szint van, leképezés os-re: JVM Thread.{Max | Min | Norm}Priority Windowsban azt hiszem 7 van
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt4 Process vs szál Process Minden processnek saját végrehajtási környezete van (pl saját memória terület) 1 program = 1-* process Process közti kommunikáció: IPC (Inter Process Communication) Egy gépen vagy több gép között Java: ProcessBuilder és Process osztályok
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt5 Process vs szál Thread Saját végrehajtási környezete van Indítása olcsóbb mint egy process indítása Hajrá Occam! 1 Process = 1-* szál Előny: thread osztozik process erőforrásain Hátrány: kommunikáció kölcsönös kizárás
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt6 Szálkezelési módok Két mód van rá Direkt szál menedzsment java.lang.Runnable és ~.Thread Magasabb (absztraktabb API) java.util.concurrent (thread pool) elsővel foglalkozunk
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt7 Szál definiálása két mód: Runnable interfész implementálása Thread osztályból származtatás, mely osztály implementálja a fenti interfészt előző preferáltabb az egyszeres öröklődés miatt
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt8 Mai gyakorlat Szemafor és monitor A szemafor a párhuzamosság alapvető eszköze alkalmas kölcsönös kizárásra és szinkronizálásra is hátránya, hogy a kezelő kód szétszórt Monitor: fogjuk össze a kódokat
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt9 Monitor Java-ban minden objektum viselkedhet monitorként. Az Object ősosztály nyújtja ezt a szolgáltatást metódusok által wait(), wait(long timeout) notify(), notifyAll()
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt10 Monitor Szerkezet: valósítsuk meg a közös erőforrást egy osztályban a rajta végzett műveletek legyenek metódusok, melyek kezelik a kommunikációs problémákat a kritikus rész így központosítottam lesznek
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt11 Object Metódusok: wait(), wait(long timeout) az aktuális szál az objektum várakozási sorába kerül, amíg egy másik szál notify(All)-t nem hív timeout: előző + max timeout ms-ig notify(), notifyAll() az első egy szálat kivesz a várakozási sorból a második mindegyiket kiveszi a sorból
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt12 Thread Metódusok: sleep(long time) az akt szál time ideig várakozik join(Thread t) aktuális szál vár, amíg t szál terminál overload változatával timeout is megadható start()/stop() szál indítás és megállítás (utóbbi Deprecated)
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt13 Thread Metódusok: interrupt() megszakítja a szál futását átállítja a belső interrupted flag-et wait és … hívások ellenőrzik a flag-et, és ha megszakították a szálat, akkor hibát dobnak InterruptedException nincs konvenció, kezelése a programozó feladata
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt14 Synchronized Kölcsönös kizárás része két helyen lehet függvény előtt public synchronized void doit() {…} függvényben, blokk előtt synchronized (Object o) {…} pl.: synchronized (this) {…} hatása: a megjelölt kódrészletet egyszerre csak egy szál hajthatja végre
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt15 Synchronized működés Statikus metódusok esetén az osztályt leíró Class objektumhoz rendelt monitort használja a kód Példány metódus esetén az adott objektum kerül használatba
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt16 Köszönöm a figyelmet!