11. Monitorok működése. A Java synchronized kulcsszóval elérhető szinkronizációt monitor segítségével valósították meg.

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "11. Monitorok működése. A Java synchronized kulcsszóval elérhető szinkronizációt monitor segítségével valósították meg."

Átírás

1 1. Elosztott, párhuzamos és konkurens programok. Többszálúság. Elosztott programokat hálózattal összekötött számítógépeken futtathatunk. Ez a megoldás a Java EE alapja, mely a távoli metódushívásokra épít (RMI). Párhuzamos programokat futtathatunk elosztott memória és megosztott memória felett is. Egy konkurens programban több végrehajtási stream hajtódik végre konkurensen. Ezeket az utasítás szekvenciákat hívjuk szálaknak. Minden ilyen szál ugyanúgy hajtódik végre, mint egy szekvenciális program azzal a különbséggel, hogy a szálak képesek egymással kommunikálni és interferálni. Többszálú program esetén a szálak átfedik egymást előre meg nem jósolható módon. 2. Elosztott és megosztott memória a folyamatok közötti kommunikációban. Megosztott memória esetén két vagy több folyamat ugyanazt a memóriarészt látja. A közös memóriaterületen közös változók segítségével érhető el a leggyorsabb folyamatok közötti kommunikáció, hiszen nem kell mozgatni az adatokat. Ha több processzorunk van és minden processzornak saját memóriája és címtartománya van, elosztott memóriáról beszélhetünk. Itt akár fizikailag másik gépben is lehetnek a processzormemória párosok. A folyamtok közötti kommunikáció lassú, üzenetekkel történik. 3. Megosztott memória a szálkezelésben: stackek, heap. Minden szálnak saját stack-je van ahol a csak a szálban látható, lokális változók kapnak helyet. A heap-en foglalt változók megoszthatók a szálak között. 4. Szálak definiálása és elindítása: Thread és Runnable. Két féle módszerrel definiálhatunk szálakat Java-ban: A Thread osztályból származtatjuk az osztályunkat Ekkor felüldefiniáljuk a Thread osztály run metódusát. Az osztályunknak lesz egy start metódusa, amit meghívva elindíthatjuk a run végrehajtását egy külön szálban. Megvalósítjuk a Runnable interface-t Sokszor már másik osztályból származtatunk és ilyenkor ezzel az interface-el is futtatható szállá tehetjük az osztályunkat. Meg kell valósítanunk a run metódust. A futatáshoz egy Thread osztály konstruktorának kell átadni a Runnable osztályunkat, amin aztán meghívhatjuk a start metódust a szál elindításához. 5. A java.lang.thread osztály műveletei. A főbb műveletek: interrupt() félbeszakítja a szál végrehajtását interrupted() statikus metódus, ellenőrzi, hogy az aktuális szálon meghívták-e az interrupt()-ot isalive(), isinterrupted() egy adott szálat tesztel join()- vár az adott szálra, hogy befejeződjön sleep(long millis) az aktuálisan futó szál felfüggesztése egy adott ideig (millis) start() elindítja a thread-et, a JVM meghívja a run metódust yield() az aktuálisan futó szál átmenetileg megáll, visszaadja a vezérlést az ütemezőnek 6. Szálak életciklusa. Miután a programozó létrehozza és elindítja az új szálat az vagy Runnable (Ready-to-run) állapotba kerül és várakozik, hogy sorra kerüljön az ütemezőnél. Ha az ütemező kiválasztja a szálat az állapota Running-ra változik. Ekkor elindul a végrehajtása. Innen Blocked állapotba akkor kerülhet, ha pl. erőforrásra vár. Innen visszakerülhet Runnable-be, ha elérhetővé vált az erőforrás. A Dead állapotba akkor kerül egy szál, ha a run metódusa végére ért. Running és Blocked állapotból is elérhető a Dead állapot.

2 Ha egy magasabb prioritású folyamat futtatható állapotba kerül, az aktuális alacsonyabb prioritású folyamat felfüggesztődik (pre-emption) és végrehajtásra kerül ez a folyamat. Ha egy szál elkezdett futni, akkor addig fut, amíg az alábbiak valamelyike be nem következeik: Thread.sleep lock-ra kezd várni, hogy egy synchronized metódust futtasson I/O-n blokkolódik Explicit visszaadja a vezérlést a yield-el terminál 7. Blokkoló tevékenységek. Synchronization actions, which are: o Volatile read. A volatile read of a variable. o Volatile write. A volatile write of a variable. o Lock. Locking a monitor o Unlock. Unlocking a monitor. o The (synthetic) first and last action of a thread. o Actions that start a thread or detect that a thread has terminated ( ). 8. Ütemezés: run-to-completion, pre-emption. Időosztás. Minimális időszelet. run-to-completion Egy folyamatot addig futtatunk, amíg kész nem lesz, vagy explicit vissza nem adja a vezérlést az ütemezőnek (yield) pre-emption A folyamtok felfüggeszthetők és az ütemező választja ki a következő folyamatot. Ez a váltás a kontextusváltás. Időosztás A JVM implementációtól függően alkalmazhat időosztást az azonos prioritású szálak futtatásakor. Ekkor a szálak adott időszeleteket kapnak a végrehajtásra és kontextus váltásokat hajt végre köztük a JVM az idő lejártakor, ha a szálak még mindig futtatható állapotban maradtak. Minimális időszelet??? 9. Kontextusváltás és a vele járó költségek. Kontextusváltásról akkor beszélünk, mikor egy folyamat helyett a processzor egy másik folyamatot kezd el futtatni. A folyamtok közötti váltás több költséggel is jár: sok CPU-idő (akár több ezer órajel) kellhet a váltáshoz több cache miss a váltás után, mivel a cache-ek elavultak lesznek túl gyakori blokkolódásnál gyakran vész el az időszelet 10. Szálak közötti interferencia. Race condition. Szálbiztosság. Szálak közötti interferenciáról akkor beszélünk, mikor két műveletet ugyanazon az adaton külön szálakból meghívva összefésülődés történik, vagyis a két művelet több lépésből áll és ezek között átfedés alakul ki. Race condition akkor lép fel mikor két vagy több szál ugyanazt az erőforrást próbálja használni. Egy szálbiztos osztály nem hibásabb konkurens szituációban, mint egyszálú környezetben. Ilyen pl. egy állapotmentes, vagy egy módosíthatatlan objektum. 11. Monitorok működése. A Java synchronized kulcsszóval elérhető szinkronizációt monitor segítségével valósították meg.

3 Minden objektum rendelkezik egy monitorral amin egy szál lock-olhat vagy unlock-olhat. Egyszerre csak egy szál tarthatja a monitor lock-ját. Minden más szál blokkolt állapotba kerül és egy várakozási sorban vár addig amíg nem tudnak lock-ot szerezni a monitoron. Egy monitort többször is lehet lock-olni, minden unlock csökkenti a lock-ok számát. 12. A volatile szerepe. A volatile kulcsszó segítségével szinkronizációt tudunk kikényszeríteni explicit lokkolás nélkül. A fordítónak mindig ki kell olvasnia a volatile változó értékét így nem fordulhat elő az, hogy egy cache-elt elavult értéket használunk. Ez azt jelenti, hogy egy szálak között megosztott volatile változónak mindig az aktuális értékét látjuk minden szálban. A volatile read és volatile write szinkronizációs akciót vált ki. Egy volatile mező írása happens-before relációban van minden ezt az írást követő olvasással az adott mezőn. Egy volatile long vagy double változó írása és olvasása mindig atomi. 13. Optimalizációk által okozott anomáliák. Kód átrendezése. Cache. Word-tearing. pl. A és B megosztott, r1 és r2 lokális változók A = B = 0 I. II. r2 = A r1 = B B = 1 A = 2 i, r2 == 2 & r1 == 1 Intra-thread vagyis egy thread-en belül biztosított a szekvenciális konzisztencia. Ez azt jelenti, hogy a thread-en belül a fordító optimalizálva pl. úgy rendezheti át a sorokat, hogy az nem változtat az intra-thread szemantikán. Így előfordulhat az, hogy a fordító az I. szálban előbb hajtja végre a B=1 utasítást, és így ha I. után jön II., akkor i lehetséges. Egy másfajta optimalizáció lehet az, ha a fordító cache-el lekérdezett értékeket és azokat újrahasznosítja, ha úgy látja, hogy intra-thread nem változott az értéke. Ez persze nem jelenti azt, hogy inter-thread sem változott, ami egy rosszul szinkronizált programnál inkonzisztenciához vezethet. Word-tearing: Ha van egy pl. 10 elemű byte tömböm és meg akarom változtatni mondjuk a 3. elemét, akkor arra számítok, hogy csak ez a 3. elem kerül módosításra a művelet során. A legtöbb processzor nem nyújt lehetőséget a byte-onkénti írásra, helyette word-öt kell olvasnunk és írnunk. Ez általában 4 byte, ami azt jelenti, hogy 1 elem helyett 4 elemre lenne hatással a változtatásunk a tömbben. Ez konkurens szálak esetén inkonzisztens állapothoz vezethetne. A JVM szerencsére garantálja az elemek vagy mezők írásának és olvasásának szeparációját, így a word tearing nem történhet meg a Java Language Specification szerint. 14. Memóriamodell. A happens-before reláció. Szekvenciális konzisztencia. A memóriamodell megadja, hogy ha van egy programunk és egy végrehajtási sorozatunk, akkor ez a végrehajtási sorozat a program egy engedélyezett végrehajtása-e. Nem azt adja meg hogyan kell többszálú alkalmazást végrehajtani, hanem egy biztosítékot ad arra, hogy mik azok az esetek amik megtörténhetnek. A happens-before reláció két akció sorrendjét tudja megadni. Ha egy akció happens-before egy másik akció, vagyis pl. hb(a1, a2), akkor a1 látható a2 számára és elé van rendezve. Programszövegbeli sorrendiség (részbenrendezés) po Szinkronizációs események sorrendje adott (teljes rendezés) Synchronizes-with reláció (részbenrendezés) sw

4 A szekvenciális konzisztencia amit el szeretnénk érni párhuzamos szálak esetén is, vagyis, hogy összefésülhetőek legyenek a végrehajtott műveleteik és szemantikusan úgy tűnjön, mintha a párhuzamos szálak utasításait szekvenciálisan hajtottuk volna létre. Erre nem nyújt garanciát a Java memória modell, de ha nem tartalmaz data race-t a programunk, akkor szekvenciálisan konzisztens. 15. Jól szinkronizált program. Data race. Légből kapott értékek. Egy program jól szinkronizált akkor és csak akkor, ha nem szerepel data race a szekvenciálisan konzisztens végrehajtásokban. Ha egy program jól szinkronizált, minden végrehajtása szekvenciálisan konzisztensnek tűnik. Ha nincs data race, minden végrehajtás szekvenciálisan konzisztensnek tűnik Data race: two or more threads in a single process access the same memory location concurrently, and at least one of the accesses is for writing, and the threads are not using any exclusive locks to control their accesses to that memory. Légből kapott értéket kaphatunk, ha több szálú programunkat a fordító optimalizálja. A fordító átrendezheti a sorokat. A long és double esetén nem atomi az olvasás/írás. 16. Atomicitás, kizárás és láthatóság biztosítása szinkronizációval. 4 byte-onként kötelező az atomicitás Java-ban. (Probléma long és double esetben.) Láthatóság biztosítható volatile változók használatával, mivel ezeket szálak közt megosztva konzisztens (nem elévült) értéket látunk. 17. Check-then-act. Invariáns több változó felett. check-then-act művelet: Lekérdezzük az aktuális állapotot, majd ennek függvényében cselekszünk. A ConcurrentMap egy olyan adatszerkezet, mely atomi putifabsent, remove és replace check-then-act műveleteket biztosít. 18. Belső állapot kiszökése. Biztonságos létrehozás és nyilvánosságra hozás. Mindenki idegen, aki az osztályunkon kívül van, ellenük meg kell védeni a belső állapotot. Összetett osztály esetén is kell lennie egy interface-nek, amire azt mondom, hogy azon kívül mindenki idegen. Pl. idegen műveletnek this-t adni TILOS! Ha csak egy kis részt adunk magunkból, az is megsérti az enkapszulációt. Ezek mind-mind konkurencia problémához vezetnek Biztonságos nyilvánosságra hozás class X { int n = 1; } X v = new X(); Vagy 0 az n, vagy 1 egy másik szálból nézve -- race-condition van u.e. volatile mezővel class X { volatile int n = 1; } X v = new X(); Ezt garantálja az intra-thread szemantika. A külső szálból úgy látszik, mintha előbb kapna értéket az n, mint hogy létrejött az objektum. 19. A final mezők szerepe. Módosíthatatlan (immutable) objektumok. A final mezőknél plusz garanciákat ad a memória modell: garantált inicializáltság. Ha létrejött az

5 objektum nem válik elérhetővé a referencia addig, amíg a mező nem elérhető. Módosíthatatlan objektumra jó példa a String osztály vagy ez a csomagoló osztály: unmodifiablemap a java Collections egy szolgáltatása olyan wrapper-t ad ami letiltja a módosító műveletek tudunk update-elni, nem tudunk újat felvenni törölni sem tudunk mindig mindenről másolatot készít, csak azt adja ki máshogy nem lehet a belső állapothoz hozzáférni Immutable objektumok tárolása azért hasznos, mert az alapból szinkronizál. Nem kell explicit lockot használnunk. 20. Szálra korlátozás, objektumra korlátozás. Egy szál lokális változójára mondhatjuk, hogy az adott szálra korlátozott. Minden szálnak saját stack-je van - lokális változókkal biztonságban vagyunk. Ha biztosítjuk, hogy egy elemre nem hivatkozhatnak a szálon kívül, akkor az az elem szálra korlátozott. Ha egy szál helyett egy objektumra korlátozzuk az adatot, akkor szálbiztossá tesszük az objektumot, vagyis lokkolunk. 21. Öröklődési problémák. Akkor tudunk kiterjeszteni szinkronizáltan, ha jól dokumentáltan, egyszerűen, szabványosan, specifikáltan szinkronizál a bázis osztály. Más esetben ugyanis törékeny lesz a megoldás, megváltozhat a bázis osztály szinkronizációja egy kód frissítéssel rejtett bomba Másik lehetőség, ha megvalósítjuk a List interface-t és mi oldjuk meg a szinkronizálást és hozzáadjuk a hiányolt műveletet az működhet, de csomó boiler plate kóddal jár és nem lesz gusztusos a megoldás. Ha final a belső mezőnk lekérdezéseknél nem kell szinkronizálni Nem könnyű szálbiztos osztályból származtatni. OOP Elosztottság 22. Adatszerkezetek. Iterálás. Vannak eleve szinkronizált adatszerkezetek: Vector és Hashtable. CopyOnWriteArrayList az ArrayList szálbiztos változata, mely minden változtató művelet esetén egy teljesen új másolatot hoz létre a belső állapotról hatékony tud lenni, ha több az írás, mint az olvasás érzékeny erre ConcurrentHashMap finom lokkolást használ, nem a teljes adatszerkezeten hív műveleteket synchronized-al hatékonyabb párhuzamosítást tesz lehetővé nem érzékeny a teljesítménye a módosító/lekérdező műveletek arányára Arra is van lehetőség, hogy szinkronizációs burokba zártjuk a nem szinkronizáló adatszerkezeteket a Collections.synchronizedXxx műveletekkel. A synchronizedxxx csomagoló osztály nem biztosít szinkronizált iterátort. Ezt azt jelenti, hogy a szinkronizált objektumunk nem szálbiztos iterátort ad vissza. Nem is gondolnánk, milyen gyakran iterálunk: pl. final Set<Integer> set = new HashSet<Integer>(); Random r = new Random(); for (int i = 0; i < 10; i++) add(r.nextint()); System.out.println("DEBUG: added ten elements to " + set); A println a set default tostring()-jét hívja, ami valószínűleg a HashSet iterátorát

6 használja majd a kiíratáshoz Termelő-fogyasztó. Work-stealing. Könnyen megvalósítható BlockingQueue segítségével. Ha korlátozzuk a puffer méretét, azzal védekezhetünk a memóriarobbanás ellen. Ez tudja robosztussá tenni a programunkat. Azért hasznos ez a séma, mert logikai felbontását adja a rendszernek. Az alkalmazás egyes komponensei önmagukat hangolják; teljesítményben és időben összehangolódnak. Segítségével jól kihasználhatóak a magok. Viszonylag olcsón párhuzamosítunk, korlátozott pufferrel önszabályozó megoldást adva. Mik lehetnek a problémák? sima sort használva több termelő és több fogyasztó esetén ha lokkolni kell a teljes adatszerkezetet nagyon sok lesz a kontextus váltás. Nem lesz hatékony. Sok lesz a konfliktus blokkoló sor esetén a sor eleje és vége párhuzamosan hozzáférhető, ami nagyban javít a teljesítményen, de több termelő és több fogyasztó esetén még mindig nem az igazi. Köztük továbbra is fenn áll a verseny. az előbbi problémán segíthet, ha nem egy központi BlockingQueue-t használunk, hanem többet és párba állítjuk a termelő és fogyasztó szálakat. Ezzel viszont akkor van gond, ha nem egyenletes a termelés. Az egyik termelő lehet, hogy nagyon sokat termel és a fogyasztója nem bírja, míg más fogyasztók lehet, hogy hamar végeznek. Nem jól skálázódik a standard megoldás az, hogy minden fogyasztónak van egy blocking deck je, ha azzal végez, másikat keres. 24. Szinkronizátorok (latch, barrier, semaphore). Future. Az alábbi szinkronizátorok a java.util.concurrent csomagban találhatók: CyclicBarrier Egy olyan segédeszköz, mellyel adott számú szál várakozik egymásra egy közös sorompónál. Akkor hasznos, ha fix számú dolgozó szálunk van, melyeknek néha várniuk kell egymásra. A cyclic a nevében arra utal, hogy újrahasznosítható a reset() metódus meghívásával. CountdownLatch Segítségével egy vagy több szállal várakozhatunk, amíg N másik szál végez a feladatával. Az N-el inicializáljuk a CountdownLatch-et majd az await metódussal blokkolhatunk szálakat. Ez a blokkolás addig tart, amíg N-szer meg nem hívjuk a countdown() metódust. Semaphore Maximum N engedélyt biztosít melyeket az acquire() metódussal kaphatnak meg a szálak. Ha elértük az N-t az újabb acquire-ok blokkolnak addig, amíg valamelyik szál meg nem hívja a release() metódust. A Future egy aszinkron számítás eredményét reprezentálja. Ez egy interface, mely metódusokat nyújt többek között annak ellenőrzésére, hogy a számítás befejeződött-e már, illetve, hogy megkapjuk az elkészült eredményt. A FutureTask egy egyszerű, Runnable megvalósítása az interface-nek. Az aszinkron akciók melyeket egy Future-el indítunk el happens-before relációban vannak a Future.get() metódushívással, mellyel az eredményeket kapjuk meg egy másik thread-ben. 25. Szálak és feladatok. Thread-pool. Executor. A szálak létrehozása általában költséges folyamat különösen, ha sok szálról van szó. A Thread objektumok nagy mennyiségű memóriát használnak és egy nagyméretű alkalmazásnál az állandó allokálása és de-allokálása ezeknek a szálaknak jelentős memóriamenedzselési overhead-et jelenthet. A thread-pool ezt a költséget tudja kiküszöbölni azzal, hogy pl. adott számú szálat allokál előre és ezeket biztosítja a feladatok futtatásához (fixed thread pool). Az Executor olyan osztály mely beküldött Runnable feladatokat képes futtatni. Általánosan

7 használt manuális Thread indítások helyett. pl. new Thread(new(RunnableTask1())).start(); new Thread(new(RunnableTask2())).start();... helyett Executor executor = anexecutor; executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ExecutionService és CompletionService. Kötegelt feladatok végrehajtására használható az ExecutionService. Aszinkron feladatokat indít az elkészült munkák feldolgozására. A submit paranccsal küldhetünk be egy végrehajtandó feladatot, melyre egy Future-t kapunk vissza. A take segítségével a következő elkészült feladatot vehetjük ki a sorból szintén egy Future formájában. Tipikusan egy CompletionService egy Executor osztályra támaszkodik, vagyis ő csak az elkészült feladatokat tartalmazó belső sorért felelős. Ennek a módszernek egy megvalósítása az ExecutorCompletionService. 27. Szálak leállítása, félbeszakítása. Szál: interrupt o java.lang.thread o public void interrupt() o public boolean isinterrupted() o public static boolean interrupted() Feladat: cancel Executor: shutdown Időkorlátos végrehajtás 28. Feladat visszavonása (cancellation). CompletionService segítségével könnyen megvalósítható, mivel a take metódussal visszakapott Future-nek van cancel metódusa. 29. A wait-notify mechanizmus. Segítségükkel blokkolhatunk egy szálat addig, amíg egy feltétel nem teljesül. Minden objektumhoz wait-set Várakozás szignálig Zárolás szükséges wait előtt ellenőrizni a várakozási feltételt wait-et ciklusba szervezni notify és notifyall Fontos, hogy ugyanarra az objektumra szinkronizáló blokkban hívjuk a wait és notify-t, hogy ne legyen úgy nevezett missed signal. 30. Holtpont, livelock, kiéheztetés. Holtpont: Két vagy több folyamat blokkolódik és egymásra vár, hogy két vagy több különböző erőforráshoz hozzáférjenek. Pl. a folyamat zárolta az X erőforrást és szeretné elérni az Y-t, míg a B folyamat zárolta az Y erőforrást és az X-et szeretné most zárolni. Livelock: A folyamtok nem blokkolódnak ugyan, de nem végeznek hasznos munkát. Kiéheztetés: Ütemezési probléma. Van olyan folyamat, amely nem jut erőforráshoz.

8 31. Prioritások. Priority inversion. Java-ban a szálaknak prioritása van. Alap állapotban, ha elindítunk egy szálat, annak a prioritása ugyanannyi lesz, mint az őt indító szál prioritása. A Thread osztály setpriority() és getpriority() metódusaival módosítható, illetve kérdezhető le ez a prioritás. A maximum kiosztható priorités 10, a minimum 1. A rendszer szálak 11-es prioritáson futnak. Priority inversion-ről akkor beszélünk, ha egy alacsonyabb prioritású folyamat implicit megelőz egy magasabb prioritású folyamatot. Példa: Consider two tasks H and L, of high and low priority respectively, either of which can acquire exclusive use of a shared resource R. If H attempts to acquire R after L has acquired it, then H becomes unrunnable until L relinquishes the resource. The use of the shared exclusive-use resource when properly designed is such that L relinquishes R promptly enough that H's priority use is not hindered excessively. In spite of the good design of these two cooperating tasks, the surprising behavior, priority inversion, occurs when any third task M of medium priority becomes runnable during L's use of R. Once H becomes unrunnable, M is the highest priority runnable task, thus it runs and while it does L cannot relinquish R. So in this scenario, the medium priority task preempts the high priority task, resulting in a priority inversion. 32. Programok hatékonyságának aspektusai: kiszolgálási idő, áteresztő képesség, válaszidő, skálázódás. 33. Profilozás szerepe. Amdahl és Gustaffson törvénye. A profilozás különböző JVM szintű paraméterek monitorozását jelent, mint pl. Method Execution, Thread Execution, Object Creation és Grabage Collection. Segítségével világosabb képet kaphatunk az alkalmazásunk végrehajtásáról és erőforrás kihasználásáról. Amdahl törvénye A több processzor használatával elérhető sebességnövekedés egy program esetén limitált azzal az idővel, ami a szekvenciális részének futtatásához szükséges. Tehát ha pl. egy programnak 20 óra kell, hogy egy szálon lefusson és ebből 1 órányi futás nem párhuzamosítható, csak a többi 19 óra (95%), akkor függetlenül attól hány processzorunk van, a minimális végrehajtási idő nem lehet kevesebb ennél a kritikus 1 óránál. Vagyis a sebességnövekedés max. 20x-os lehet. Gustafson törvénye A számítás hatékonyan párhuzamosítható tetszőlegesen nagy adathalmaz esetén. Látható, hogy ellentétben áll az Amdahl törvénnyel. P a processzorok száma, S a sebességnövekedés és párhuzamos folyamatnak. a nem párhuzamosítható része bármely 34. Szinkronizáció költsége. Spin-lock és busy-waiting. Lock spliting. A szinkronizáció a párhuzamos végrehajtás ellen dolgozik, hiszen a szálakon időbeli rendezést definiál. Ebből következik, hogy minél többet szinkonizálunk szálaink között, annál kevesebb munka történik valóban párhuzamosan. busy-waiting spinlock lock splitting akkor beszélünk busy-waiting-ről, ha egy folyamat folyamatosan megvizsgál egy logikai állítást, hogy az igaz-e már egy fajta busy-waiting egy ciklusban (spin) folyamatosan várakozunk, amíg a lock-ot meg nem tudjuk szerezni nem hatékony független metódushalmazokat külön lock-okkal szinkronizálhatunk, így finomabb szinkronizációt érhetünk el

9 35. Explicit lockok. a metódusok definiálásakor nem használjuk a synchronized kulcsszót, de a törzsben az adott lock-ot használó synchronized blokkba kerül a kódunk 36. Író-olvasó szinkronizáció. ReadWriteLock interfész readlock writelock Két lock-ot kezel, egyet az írásért és egyet explicite az olvasásért. Magasabb szintű konkurenciát tesz lehetővé, mint a kölcsönös kizárás. Kihasználja azt, hogy sok esetben míg csak egy szál írhatja az adatot, több szál olvashatja azt egyszerre. 37. CAS, nem blokkoló adatszerkezet. A CAS vagy compare-and-swap egy atomi utasítás többszálú környezetben, melyet szinkronizációs célból használhatunk. Mielőtt végrehajtanánk egy adott módosítást, összehasonlítjuk a memória értékét a kezünkben lévő régi értékkel és csak akkor változtatjuk a memória értékét a kívánt új értékre, ha egyezést találtunk. Mindezt egyetlen atomi utasításban tesszük.

S4-03 Többszálú programok, a Java nyelv szinkronizációs eszközei

S4-03 Többszálú programok, a Java nyelv szinkronizációs eszközei S4-03 Többszálú programok, a Java nyelv szinkronizációs eszközei Tartalom 1. Többszálú programok ütemezése 2. A Java nyelv szinkronizációs eszközei 3. Jól szinkronizált programok, a happens-before reláció

Részletesebben

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

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés 2013 1 / 21 C# Szálkezelés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés 2013 1 / 21 Tartalomjegyzék 1 Bevezetés 2 Szálkezelés 3 Konkurens Programozás Tóth Zsolt (Miskolci Egyetem)

Részletesebben

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

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 Végrehajtási szálak Runnable, Thread Végrehajtási szálak Java-ban A Java program az operációs rendszer egy folyamatán (process) belül fut. A folyamat adat és kód szegmensekből áll, amelyek egy virtuális

Részletesebben

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

Programozási nyelvek és módszerek Java Thread-ek Programozási nyelvek és módszerek Java Thread-ek Laki Sándor lakis@inf.elte.hu 2006. május 3. 0-0 Szálak (Threads) Ahhoz, hogy egy mai rendszer m ködhessen több 10-100 folyamatnak kell futnia. A folyamatok

Részletesebben

Concurrency in Swing

Concurrency in Swing Concurrency in Swing A szálkezelés a swing alkalmazásokban is fontos. Cél egy olyan felhasználói felület készítése, amely soha nem fagy, mindig válaszol a felhasználói interakciókra, bármit is csináljon

Részletesebben

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok: Operációs rendszerek MS Windows NT (2000) folyamatok Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok: szálak ütemezése végrehajtásra

Részletesebben

Programozási technológia 2.

Programozási technológia 2. Programozási technológia 2. Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Párhuzamosság A számítógépek egy időben több feladatot is el tudnak látni Gyakran még egyszerű alkalmazásoktól is elvárt, hogy

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication) 1 Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication) 1. A folyamat (processzus, process) fogalma 2. Folyamatok: műveletek, állapotok, hierarchia 3. Szálak (threads)

Részletesebben

Kölcsönös kizárás, atomicitás, szemafor.

Kölcsönös kizárás, atomicitás, szemafor. Kölcsönös kizárás, atomicitás, szemafor kertesz.gabor@nik.uni-obuda.hu Lock lock (object o) struktúra C#-ban Kölcsönös kizárás megvalósítása object o: szinkronizációs objektum Bármely közös változó lehet,

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

Java Concurrency Kozsik Tamás kto@elte.hu http://kto.web.elte.hu/ Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2010. Kozsik Tamás (ELTE) Java Concurrency 2010. 1 / 67

Részletesebben

LabView Academy. 4. óra párhuzamos programozás

LabView Academy. 4. óra párhuzamos programozás LabView Academy 4. óra párhuzamos programozás Ellenőrző kérdések Hogyan lehet letiltani az automatikus hibakezelés funkciót? a) Engedélyezzük az Execution highlighting ot b) A subvi error out cluster-jét

Részletesebben

Operációs rendszerek. Az NT folyamatok kezelése

Operációs rendszerek. Az NT folyamatok kezelése Operációs rendszerek Az NT folyamatok kezelése Folyamatok logikai felépítése A folyamat modell: egy adott program kódját végrehajtó szál(ak)ból és, a szál(ak) által lefoglalt erőforrásokból állnak. Folyamatok

Részletesebben

Operációs rendszerek III.

Operációs rendszerek III. A WINDOWS NT memóriakezelése Az NT memóriakezelése Memóriakezelő feladatai: Logikai-fizikai címtranszformáció: A folyamatok virtuális címterének címeit megfelelteti fizikai címeknek. A virtuális memóriakezelés

Részletesebben

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication) 1 Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication) 1. A folyamat (processzus, process) fogalma 2. Folyamatok: műveletek, állapotok, hierarchia 3. Szálak (threads)

Részletesebben

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék Az UPPAAL egyes modellezési lehetőségeinek összefoglalása Majzik István BME Méréstechnika és Információs Rendszerek Tanszék Résztvevők együttműködése (1) Automaták interakciói üzenetküldéssel Szinkron

Részletesebben

VIII. Szálak és animáció

VIII. Szálak és animáció 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

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html 1 Kivételkezelés I. szokatlan, váratlan

Részletesebben

Programozási technológia 2.

Programozási technológia 2. Programozási technológia 2. Szálkezelés 2., Párhuzamosság Swing környezetben Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. 2 Az eddig látott szálkezelési lehetőségek a Java kezdetektől elérhető alacsony

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

Operációs rendszerek Folyamatok 1.1

Operációs rendszerek Folyamatok 1.1 Operációs rendszerek p. Operációs rendszerek Folyamatok 1.1 Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK A rendszermag Rendszermag

Részletesebben

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak. Párhuzamos programok Legyen S parbegin S 1... S n parend; program. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak. Folyamat

Részletesebben

Elosztott rendszerek

Elosztott rendszerek Elosztott rendszerek NGM_IN005_1 Konkurrens folyamatok Folyamat koncepció Adatok (információ reprezetáció) M!veletek (input->output) Számítás (algoritmus) Program (formális nyelv) Folyamat (végrehajtás

Részletesebben

Collections. Összetett adatstruktúrák

Collections. Összetett adatstruktúrák Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,

Részletesebben

JAVA SE/ME tanfolyam tematika

JAVA SE/ME tanfolyam tematika JAVA SE/ME tanfolyam tematika TANFOLYAM TEMATIKA: A JAVA MEGISMERÉSE Java története, miért készült, miért népszerű NETBEANS környezet telepítése, megismerése Programozási alapok java nyelven Változók,primitív

Részletesebben

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában? Szálkezelés 1. A szekvencia diagram feladata az objektumok egymás közti üzenetváltásainak ábrázolása egy időtengely mentén elhelyezve. Az objektumok életvonala egy felülről lefelé mutató időtengely. A

Részletesebben

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

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése Végrehajtási szálak - kiegészítések Szinkronizálás, érvénytelenített metódusok helyettesítése Szinkronizálás Szinkronizálás szükségessége, példa: egy végrehajtási szál kiolvas egy adatstruktúrából egy

Részletesebben

Párhuzamos programozási platformok

Párhuzamos programozási platformok Párhuzamos programozási platformok Parallel számítógép részei Hardver Több processzor Több memória Kapcsolatot biztosító hálózat Rendszer szoftver Párhuzamos operációs rendszer Konkurenciát biztosító programozási

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

Konkurens TCP Szerver

Konkurens TCP Szerver A gyakorlat célja: Konkurens TCP Szerver Megismerkedni a párhuzamos programozás és a konkurens TCP szerver készítésének az elméleti és gyakorlati alapjaival és egy egyidejűleg több klienst is kiszolgáló

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java -en objektumot tárolunk. Automatikus változók Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 3. előadás - végrehajtási vermen (execution stack) jönnek létre - alprogramok

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

Párhuzamos programozási platformok

Párhuzamos programozási platformok Párhuzamos programozási platformok Parallel számítógép részei Hardver Több processzor Több memória Kapcsolatot biztosító hálózat Rendszer szoftver Párhuzamos operációs rendszer Konkurenciát biztosító programozási

Részletesebben

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről

Részletesebben

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

Párhuzamosság. Java a párhuzamosítást több féle képpen támogatja. Java Szálkezelés Párhuzamosság Számító gépek egy időben több feladatot is el tudnak látni. Gyakran még egyszerű alkalmazásoktól is elvárt, hogy párhuzamosan több dologgal is foglalkozzanak. Például egy

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform

Részletesebben

Folyamatok. 6. előadás

Folyamatok. 6. előadás Folyamatok 6. előadás Folyamatok Folyamat kezelése, ütemezése folyamattábla új folyamat létrehozása átkpcsolás folyamatok elválasztása egymástól átlátszó Szál szálkezelő rendszer szálak védése egymástól

Részletesebben

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18 C# Nyelvi Elemei Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei 2013 1 / 18 Tartalomjegyzék 1 Object 2 Típusok 3 String 4 RegEx Tóth Zsolt (Miskolci Egyetem) C# Nyelvi

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész 3. előadás Protokollok Kommunikáció 2. rész RPC (Remote Procedure Call) távoli eljáráshívás RMI (Remote Method Invocation) távoli metódushívás MOM (Message-Oriented Middleware) üzenetorientált köztesréteg

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 12. gyakorlat 1 Távoli metódushívás Java-ban (RMI) Java-ban a távoli metódushívás ( Remote Method Invocation, RMI) egy

Részletesebben

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Generikus osztályok Gyűjtemények Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Generikus osztályok Javaban az UML paraméteres osztályainak a generikus (sablon) osztályok felelnek

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 2. gyakorlat Függvények Általános prototípus Módosítószavak Láthatóság: public, protected, private. Ha nem definiált, akkor úgynevezett package-private láthatóság. Lehet abstract

Részletesebben

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

Magas szintű programozási nyelvek 2 Előadás jegyzet Magas szintű programozási nyelvek 2 Előadás jegyzet 1. Rendszerfejlesztés 0. lépés: Elemzés (analízis) 1. lépés: Tervezés a, technológia független rész b, technológia függő rész 2. lépés: Megvalósítás

Részletesebben

Szkriptnyelvek. 1. UNIX shell

Szkriptnyelvek. 1. UNIX shell Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek

Részletesebben

Párhuzamos és Grid rendszerek

Párhuzamos és Grid rendszerek Párhuzamos és Grid rendszerek (10. ea) GPGPU Szeberényi Imre BME IIT Az ábrák egy része az NVIDIA oktató anyagaiból és dokumentációiból származik. Párhuzamos és Grid rendszerek BME-IIT

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

Részletesebben

ios alkalmazásfejlesztés Koltai Róbert

ios alkalmazásfejlesztés Koltai Róbert ios alkalmazásfejlesztés Koltai Róbert robert.koltai@ponte.hu Mi az a block? Utasítások sorozata { }-ek között, amit egy objektumként tuduk kezelni. ios 4.0 és Mac OSX 10.6 óta 2 Egy példa a felépítésére

Részletesebben

Számítógépek felépítése

Számítógépek felépítése Számítógépek felépítése Emil Vatai 2014-2015 Emil Vatai Számítógépek felépítése 2014-2015 1 / 14 Outline 1 Alap fogalmak Bit, Byte, Word 2 Számítógép részei A processzor részei Processzor architektúrák

Részletesebben

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,

Részletesebben

Generikus osztályok, gyűjtemények és algoritmusok

Generikus osztályok, gyűjtemények és algoritmusok Programozási, gyűjtemények és algoritmusok bejárása Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 bejárása 2 bejárása 2 Java-ban és UML-ben bejárása Az UML-beli paraméteres osztályok a Java

Részletesebben

Java programozási nyelv 4. rész Osztályok II.

Java programozási nyelv 4. rész Osztályok II. Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat Megoldás Feladat 1. Statikus teszt Specifikáció felülvizsgálat A feladatban szereplő specifikáció eredeti, angol nyelvű változata egy létező eszköz leírása. Nem állítjuk, hogy az eredeti dokumentum jól

Részletesebben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

Webprogramozás szakkör

Webprogramozás szakkör Webprogramozás szakkör Előadás 5 (2012.04.09) Programozás alapok Eddig amit láttunk: Programozás lépései o Feladat leírása (specifikáció) o Algoritmizálás, tervezés (folyamatábra, pszeudokód) o Programozás

Részletesebben

Operációs rendszerek. Az NT memóriakezelése

Operációs rendszerek. Az NT memóriakezelése Operációs rendszerek MS Windows NT (2000) memóriakezelés Az NT memóriakezelése 32-bites virtuális memóriakezelés: 4 GB-os címtartomány, alapesetben: a fels! 2 GB az alkalmazásoké, az alsó 2 GB az OPR-é.

Részletesebben

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben

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

PROBLÉMAFELVETÉS. Programozás III. Mit csinál? SZÁLAK + MULTIMÉDIA Programozás III PROBLÉMAFELVETÉS Mit csinál? SZÁLAK + MULTIMÉDIA PROBLÉMAFELVETÉS RÉSZLET JAVÍTÁSI ÖTLET 1 JOBB JAVÍTÁSI ÖTLET MEGOLDÁS SZÁLKEZELÉS még mindig nem látszik semmi mert az applet is alszik

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Generikus Típusok, Kollekciók

Generikus Típusok, Kollekciók Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Programozás C++ -ban 2007/7

Programozás C++ -ban 2007/7 Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum

Részletesebben

ISA szimulátor objektum-orientált modell (C++)

ISA szimulátor objektum-orientált modell (C++) Budapesti Műszaki és Gazdaságtudományi Egyetem ISA szimulátor objektum-orientált modell (C++) Horváth Péter Elektronikus Eszközök Tanszéke 2015. február 12. Horváth Péter ISA szimulátor objektum-orientált

Részletesebben

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Szenzorhálózatok programfejlesztési kérdései. Orosz György Szenzorhálózatok programfejlesztési kérdései Orosz György 2011. 09. 30. Szoftverfejlesztési alternatívák Erőforráskorlátok! (CPU, MEM, Energia) PC-től eltérő felfogás: HW közeli programozás Eszközök közvetlen

Részletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2010/2011-2 félév, 11. gyakorlat (az előző 2 gyak közül az egyiken ZH volt, a másik szünet miatt elmaradt) 1 JAR fájl készítés A JAR (Java

Részletesebben

Felhasználó által definiált adattípus

Felhasználó által definiált adattípus Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési

Részletesebben

Rekurzió. Dr. Iványi Péter

Rekurzió. Dr. Iványi Péter Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(

Részletesebben

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna Processzusok 1 Uniprogramozás Program A futás várakozás futás várakozás Idő A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna 2 Multiprogramozás Program A futás vár futás

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

A programozás alapjai

A programozás alapjai A programozás alapjai Változók A számítógép az adatokat változókban tárolja A változókat alfanumerikus karakterlánc jelöli. A változóhoz tartozó adat tipikusan a számítógép memóriájában tárolódik, szekvenciálisan,

Részletesebben

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;

Részletesebben

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

Programozás II. ATM példa Dr. Iványi Péter

Programozás II. ATM példa Dr. Iványi Péter Programozás II. ATM példa Dr. Iványi Péter 1 ATM gép ATM=Automated Teller Machine Pénzkiadó automata Kezelő szoftvert szeretnénk írni Objektum-orientált módon 2 Követelmények Egyszerre csak egy embert

Részletesebben

Informatika terméktervezőknek

Informatika terméktervezőknek Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások

Részletesebben

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi. Függvények 1.Függvények...1 1.1.A függvény deníció szintaxisa... 1..Függvények érték visszatérítése...3 1.3.Környezettel kapcsolatos kérdések...4 1.4.Lokális változók használata...4 1.5.Rekurzív hívások...5.kód

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. október 2. 4. El adás Adatszerkezetek A java által deniált adatszerkezetek: Enumeration BitSet Vector Stack Dictionary Hashtable Properties Adatszerkezetek A java által

Részletesebben

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek JAVA EA+GY 1. gyakolat Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 11.gyakorlat Operációsrendszertől függő tulajdonságok PATH elválasztó Unix ":" Windows ";" final String PATH_SEPARATOR = File.pathSeparator; Ugyanaz, csak karakterkent final char

Részletesebben

Java I. A Java programozási nyelv

Java I. A Java programozási nyelv Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem

Részletesebben

Task-alapú párhuzamosítás C# környezetben

Task-alapú párhuzamosítás C# környezetben Task-alapú párhuzamosítás C# környezetben OE-NIK 1 Task Aszinkron elvégzett feladat A háttérben egy Thread vagy egy ThreadPool egy eleme van: magasabb absztrakciós szinten dolgozunk ThreadPool Gyakorlatilag

Részletesebben

Operációs rendszerek 1. 8. előadás Multiprogramozott operációs rendszerek

Operációs rendszerek 1. 8. előadás Multiprogramozott operációs rendszerek Operációs rendszerek 1. 8. előadás Multiprogramozott operációs rendszerek Soós Sándor Nyugat-magyarországi Egyetem Faipari Mérnöki Kar Informatikai és Gazdasági Intézet E-mail: soossandor@inf.nyme.hu 2011.

Részletesebben

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1 Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

A SZOFTVERTECHNOLÓGIA ALAPJAI

A SZOFTVERTECHNOLÓGIA ALAPJAI A SZOFTVERTECHNOLÓGIA ALAPJAI Objektumorientált tervezés 8.előadás PPKE-ITK Tartalom 8.1 Objektumok és objektumosztályok 8.2 Objektumorientált tervezési folyamat 8.2.1 Rendszerkörnyezet, használati esetek

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben