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.
|
|
- Elemér Győző Szekeres
- 8 évvel ezelőtt
- Látták:
Á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 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észletesebbenC# 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észletesebbenVé 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észletesebbenProgramozá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észletesebbenConcurrency 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észletesebbenOperá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észletesebbenProgramozá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észletesebbenSzé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észletesebbenOsztá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észletesebbenProcesszusok (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észletesebbenKö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észletesebbenHelyes-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észletesebbenOOP: 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észletesebbenJava 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észletesebbenLabView 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észletesebbenOperá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észletesebbenOperá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észletesebbenProcesszusok (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észletesebbenAz 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észletesebbenVIII. 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észletesebbenSzoftvertechnoló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észletesebbenProgramozá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észletesebbenSzoftvertechnoló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észletesebbenOperá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.
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észletesebbenElosztott 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észletesebbenCollections. Ö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észletesebbenJAVA 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észletesebbenSzá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észletesebbenVé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észletesebbenPá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észletesebbenProgramozá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észletesebbenKonkurens 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észletesebbenProgramozá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észletesebbenOOP #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észletesebbenKivé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észletesebbenPá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észletesebbenProgramozá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észletesebbenPá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észletesebbenMá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észletesebbenJava 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észletesebbenFolyamatok. 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észletesebbenC# 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észletesebbenProgramozá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észletesebbenKommuniká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észletesebbenSegé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észletesebbenOBJEKTUM 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észletesebbenProgramozá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észletesebbenPelda ö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észletesebbenProgramozá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észletesebbenMagas 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észletesebbenSzkriptnyelvek. 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észletesebbenPá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észletesebbenJAVA 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észletesebbenios 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észletesebbenSzá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észletesebben2011.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észletesebbenGenerikus 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észletesebbenJava 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
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észletesebbenInterfé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észletesebbenOOP: 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észletesebbenJava 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észletesebbenMegoldá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észletesebbenVisual 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észletesebbenWebprogramozá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észletesebbenOperá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észletesebbenProgramozá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észletesebbenPé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észletesebbenPROBLÉ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észletesebbenJava 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észletesebbenGenerikus 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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenISA 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észletesebbenProgramozá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észletesebbenSzenzorhá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észletesebbenMiutá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észletesebbenProgramozá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észletesebbenSegé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észletesebbenFelhaszná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észletesebbenRekurzió. 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észletesebbenUniprogramozá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észletesebbenJava 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észletesebbenA 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észletesebbenBevezeté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észletesebbenBevezeté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észletesebbenProgramozá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észletesebbenInformatika 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észletesebbenA 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észletesebbenJava é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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenJava 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észletesebbenTask-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észletesebbenOperá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észletesebbenJava 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észletesebbenList<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észletesebbenA 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észletesebbenOsztá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