Vláknové programování část IV
|
|
- Hynek Dušan Štěpánek
- před 9 lety
- Počet zobrazení:
Transkript
1 Vláknové programování část IV Lukáš Hejmánek, Petr Holub Laboratoř pokročilých síťových technologií PV /49
2 Přehled přednášky Monitory a synchronizace Signalizace a suspend Paralelní vzory Pokročilé vlasnosti Javy Atomické typy Concurrent Collections Explicitní zamykání 2/49
3 synchronized a monitory Monitory Hoare, Dijkstra, Hansen, cca 1974 vynucuje serializovaný přístup k objektu synchronized základní nástroj pro vyloučení v kritické sekci v Javě se označuje jako monitor synchronizuje se na explicitně uvedeném objektu (raději final) nebo (implicitně) na this Javové monitory nezahrnují podmínky, jsou jednodušší než Hoareho 3/49
4 synchronized a monitory 1 import 3 public class PrikladSynchronized { Integer cislo; 5 public PrikladSynchronized() { this.cislo = 0; 7 public PrikladSynchronized(Integer cislo) { 9 this.cislo = cislo; 11 void pricti(int i) { synchronized (this) { 13 cislo += i; 15 synchronized int kolikjecislo() { 17 return cislo; 19 4/49
5 synchronized a monitory Java monitor pattern 1 import net.jcip.annotations.guardedby; // 3 public class MonitorPattern { 5 private final Object zamek = new Object mujobject; 7 void metoda() { 9 synchronized (zamek) { // manipulace s objektem mujobject; /49
6 Sychronized Collections Přímo synchronizované kolekce: Vector, Hashtable Synchronizované obaly: Collection.synchronizedX factory metody Tyto kolekce jsou thread-safe, ale poněkud zákeřné může být potřeba chránit pomocí zámků složené akce iterace navigace (procházení prvků v nějakém pořadí) podmíněné operace, např. vlož-pokud-chybí (put-if-absent) 6/49
7 Sychronized Collections 1 import java.util.vector; 3 public class PodlaKolekce { public static Object dejposledni(vector v) { 5 int posledni = v.size() - 1; return v.get(posledni); 7 9 public static void smazposledni(vector v) { int posledni = v.size() - 1; 11 v.remove(posledni); 13 7/49
8 Sychronized Collections 8/49
9 Sychronized Collections Výše uvedené chování nemůže poškodit Vector v thread-safe Chování ale bude zmatečné mezi získání indexu poslední položky a get() ev. remove() se může vloudit jiný remove() vyhazování výjimky ArrayOutOfBoundException Lze ošetřit klientským zamykáním, pokud známe objekt, na němž se v sychronizované kolekci dělá monitor 9/49
10 Sychronized Collections 1 import java.util.vector; 3 public class RucneSyncnutaKolekce { public static Object dejposledni(vector v) { 5 synchronized (v) { int posledni = v.size() - 1; 7 return v.get(posledni); 9 11 public static void smazposledni(vector v) { synchronized (v) { 13 int posledni = v.size() - 1; v.remove(posledni); /49
11 Signalizace mezi objekty Definováno pro každý Object Musí být vlastníkem monitoru pro daný Objekt synchronized sekce Metoda wait() usnutí do doby notifikace při usnutí se vlákno vzdá monitoru po probuzení čeká, než monitor může opět získat Metoda notify() notifikace jednoho z čekajících pokud je čekajících více, vybere se jeden (libovolně dle implementace) vybuzené vlákno pokračuje až poté, co se notifikující vlákno vzdá monitoru Metoda notifyall() notifikace všech vláken čekajících na daném objektu 11/49
12 Signalizace mezi objekty 12/49
13 Suspendování vláken Metody Thread.suspend() a Thread.resume jsou inherentně nebezpečné deadlocky Emulace pomocí wait() a notify() 13/49
14 2 Suspendování vláken import static java.lang.thread.sleep; public class PrikladSuspendu { 4 static class MojeVlakno extends Thread { private volatile boolean ukoncise = false; 6 private volatile boolean spi = false; 8 public void run() { while (!ukoncise) { 10 System.out.println("...makam..."); try { 12 sleep(500); synchronized (this) { 14 while (spi) { wait(); catch (InterruptedException e) { System.out.println("Necekane probuzeni!"); System.out.println("...domakal jsem..."); 14/49
15 Suspendování vláken 1 public void skonci() { ukoncise = true; 3 5 public void usni() { spi = true; 7 9 public void vzbudse() { spi = false; 11 synchronized (this) { this.notify(); /49
16 Suspendování vláken Ztracené zprávy o.wait() a o.notify() resp. o.notifyall nemají mechanismus zdržení notifikace pokud vlákno usne na o.wait() později, než mělo být notifikováno přes o.notify, nikdy se nevzbudí deadlock Problém při signalizaci s podmínkami odpovídá Hoareho monitorům vlákno usne do doby, než je splněna podmínka v době vzbuzení je garantováno, že je podmínka pořád splněna implementace Hoarových monitorů pro Javu: http: // 16/49
17 Suspendování vláken Podmíněná signalizace 17/49
18 Suspendování vláken // podmineny predikat musi byt chraneny zamkem 2 synchronized (lock) { while (!conditionpredicate) 4 lock.wait(); // nyni je objekt v pozadovanem stavu 6 Pravidla pro signalizaci s podmínkami 1. zformulovat a ověřit podmínku před voláním wait() 2. wait() bežet ve smyčce, kontrolovat po vzbuzení probuzení z wait() mohlo nastat z jiného důvodu 3. zajistit, aby proměnné v podmínce byly chráněny tím zámkem, který se používá v monitoru 4. držet zámek v době volání wait(), notify(), notifyall() Potřeba zajistit, aby při změně podmínky vždy někdo zasignalizoval Signál se může ztratit, pokud bychom se vzdali mezi dalším testem monitoru 18/49
19 Vzor producent konzument Třídy Queue a BlockingQueue metody: offer() přidává na konec fronty (blokuje se v případě BlockingQueue a zaplnění kapacity) nepoužívat add() pro fronty s omezenou kapacitou peek() vrátí prvek ze začátku fronty, ale neodstraní ho z fronty poll() vrátí prvek ze začátku fronty, null pokud je fronta prázdná remove() vrátí prvek ze začátku fronty, výjimka NoSuchElementException pokud je fronta prázdná take() vrátí prvek ze začátku blokující fronty, nebo se zablokuje, dokud je fronta prázdná typy ConcurrentLinkedQueue neblokující, FIFO, efektivní wait-free algoritmus, nesmí obsahovat null PriorityQueue podpora priority (přirozené uspořádání, public interface Comparable<T>) LinkedBlockingQueue blokující obdoba ConcurrentLinkedQueue PriorityBlockingQueue blokující obdoba PriorityQueue SynchronousQueue synchronní blokující fronta (offer() se zablokuje až do odpovídajícího take()) 19/49
20 import java.util.*; 2 import java.util.concurrent.*; Vzor producent konzument 4 public class Fronty { public class NeblokujiciFronty { 6 Queue clq = new ConcurrentLinkedQueue(); Queue pq = new PriorityQueue(50); 8 Queue q = new SynchronousQueue(); public class BlokujiciFronty { BlockingQueue bclq = new LinkedBlockingQueue(30); 14 BlockingQueue bpq = new PriorityBlockingQueue(); 16 void pouziti() { bclq.offer(new Object()); 18 Object o = bclq.peek(); o = bclq.poll(); 20 try { o = bclq.take(); 22 catch (InterruptedException e) { e.printstacktrace(); /49
21 Vzor producent konzument Vzor producent konzument producenti přidávají práci do fronty (offer()) konzumenti přidávají práci do fronty (take()) zvláště zajímavé se thread pools 21/49
22 import java.util.concurrent.*; Vzor producent konzument 2 public class ProducentKonzument extends Thread { 4 public class Task { 6 BlockingQueue<Task> bclq = new LinkedBlockingQueue<Task>(); 8 public void run() { Thread producent = new Thread() { 10 public void run() { bclq.offer(new Task()); 12 ; 14 Thread konzument = new Thread() { 16 public void run() { try { 18 Task t = bclq.take(); catch (InterruptedException e) { 20 System.out.println("Necekane probuzeni!"); 22 ; 24 producent.start(); 26 konzument.start(); 28 22/49
23 Vzor kradení práce Deque a BlockingDeque umožňují vybírat prvky ze začátku i z konce fronty normální konzumenti vybírají prvky ze začátku fronty vlákna, která se nudí mohou převzít práci z konce fronty např. udržování fronty per vlákno, nudící se vlákna mohou koukat do cizích front vhodné např. pro situace, kdy si vlákno generuje další práci samo pro sebe (webový crawler) 23/49
24 import java.util.concurrent.*; Vzor kradení práce 2 public class KradeniPrace { 4 public class Task { 6 BlockingDeque<Task> deque = new LinkedBlockingDeque<Task>(20); 8 public void run() { Thread producent = new Thread() { 10 public void run() { deque.offer(new Task()); ; 12 Thread konzument1 = new Thread() { 14 public void run() { try { 16 Task t = deque.take(); catch (InterruptedException e) { ; 22 Thread konzument2 = new Thread() { public void run() { Task t = deque.polllast(); 24 ; 26 producent.start(); konzument1.start(); konzument2.start(); 28 24/49
25 Další synchronizační prvky semafory počáteční kapacita N permitů acquire() získá permit, eventuálně se zablokuje, pokud permity došly release() vrátí permit 25/49
26 Další synchronizační prvky závlačka CountDownLatch speciální typ semaforu, z jehož kapacity lze jen odečítat await() čeká, až hodnota klesne na 0 např. čekání na až doběhne n nějakých událostí import java.util.concurrent.countdownlatch; 2 public class Zavlacka extends Thread { 4 static final int POCET_UDALOSTI = 10; CountDownLatch cdl = new CountDownLatch(POCET_UDALOSTI); 6 public void run() { Thread ridici = new Thread(){ 8 public void run() { for (int i = 0; i < POCET_UDALOSTI; i++) { 10 cdl.countdown(); 12 ; 26/49
27 Další synchronizační prvky závlačka CountDownLatch 14 Thread cekaci = new Thread() { public void run() { 16 try { System.out.println("Musim pockat na " 18 + POCET_UDALOSTI + " udalosti"); cdl.await(); 20 System.out.println("Ted teprv muzu bezet."); catch (InterruptedException e) { 22 System.out.println("Neocekavane vzbuzeni!"); 24 ; 26 cekaci.start(); ridici.start(); 28 public static void main(string[] args) { 30 new Zavlacka().start(); 32 27/49
28 Další synchronizační prvky FutureTask podrobně si koncept probereme u Futures a ThreadPoolExecutors je implementována pomocí Callable obdoba Runnable, akorát umožňuje vracet hodnotu metoda get() umožňuje čekat, než je k dispozici návratová hodnota 28/49
29 Další synchronizační prvky bariéry umožňuje více vláknům se se jít v jednom místě např. pro iterativní výpočty, kde jedna iterace může být rozdělena na n paralelních a další iterace je závislá na výsledku předchozí iterace zatímco závlačky jsou určeny k čekání na události, bariéry jsou určeny k čekání na jiná vlákna CyclicBarrier bariéra pro opakované setkávání se konstantního počtu vláken pokud se nějaké vlákno vzbudí během await() metody, považuje se bariéra za prolomenou a všichni ostatní čekající dostanou BrokenBarrierException Exchanger výměna dat během bariéry ekvivalent konceptu rendezvous v Adě 29/49
30 Atomické typy čekání na synchronized monitor vede na přeplánování vlákna atomické proměnné to zvládnou bez přepínání kontextu vyšší výkon pro nízkou až střední míru soutěžení o zámek (lock contention) tzv. wait-free synchronizace Zdroj: Goetz B., Peierls T., Bloch J., Bowbeer J., Holmes D., Lea D. Java Concurrency in Practice. Addison Wesley Professional, /49
31 Atomické typy čekání na synchronized monitor vede na přeplánování vlákna atomické proměnné to zvládnou bez přepínání kontextu vyšší výkon pro nízkou až střední míru soutěžení o zámek (lock contention) tzv. wait-free synchronizace Zdroj: Goetz B., Peierls T., Bloch J., Bowbeer J., Holmes D., Lea D. Java Concurrency in Practice. Addison Wesley Professional, /49
32 Atomické typy podpora v HW compare-and-swap (CAS) CAS(x, y) funkce: porovnej obsah paměti s x a pokud je identický, nahraď jej za y návratová hodnota: úspěch změny (buď jako boolean nebo jako hodnota, kterou má paměť před provedením instrukce) podpora: IA-32, Sparc double compare-and-swap (DCAS/CAS2) funkce: výměna hodnot na dvou místech v paměti na základě původních hodnot jednoduchá implementace atomické Deque lze emulovat pomocí CAS (pomalá) podpora u Motorol 68k double-wide compare-and-swap funkce: výměna hodnot na dvou přilehlých místech v paměti podpora: CMPXCHG8B a CMPXCHG16B na novějších x86 Single compare, double swap funkce: výměna hodnot na dvou místech v paměti v závislosti na jedné původní hodnotě podpora: cmp8xchg16 u Ithania 32/49
33 Atomické typy podpora v HW load-link/store-conditional (LL/SC) funkce: (1) LL načte hodnotu paměti, (2) SC ji změní pouze pokud se původní hodnota od operace LL nezměnila, jinak selže silnější než CAS řeší i problém ABA podpora: ldl_l/stl_c a ldq_l/stq_c (Alpha), lwarx/stwcx (PowerPC), ll/sc (MIPS), ldrex/strex (ARM version 6 avyšší) fetch-and-add funkce: atomická inkrementace obsahu paměti návratová hodnota: původní hodnota paměti podpora: x86 od 8086 (ADD s prvním operandem specifikujícím místo v paměti, nicméně nevrací původní hodnotu s LOCK prefixem atomické i u více procesorů), XADD od 486 vrací původní hodnotu 33/49
34 Atomické typy AtomicX z java.util.concurrent AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference Zajištěné atomické aktualizace Podpora od Java 5.0 HW optimalizace CAS instrukce (IA-32, Sparc) podpora v JVM od /49
35 Využítí atomických typů Návrh algoritmu buď vyžaduje pouze jednu atomickou změnu nebo z první změny musí být odvoditelné ostatní a musí je být schopen dokončit kdokoli Kolekce ConcurrentLinkedQueue WaitFreeReadQueue WaitFreeReadQueue.html WaitFreeWriteQueue WaitFreeWriteQueue.html 35/49
36 Neblokující seznam: Michael-Scott, /49
37 Neblokující seznam: Michael-Scott, 1996 import java.util.concurrent.atomic.atomicreference; 2 // dle 4 public class AtomickySeznam<E> { private static class Node<E> { 6 final E polozka; final AtomicReference<AtomickySeznam.Node<E>> next; 8 public Node(E polozka, AtomickySeznam.Node<E> next) { 10 this.polozka = polozka; this.next = new 12 AtomicReference<AtomickySeznam.Node<E>>(next); private final AtomickySeznam.Node<E> dummy = new AtomickySeznam.Node<E>(null, null); 18 private final AtomicReference<AtomickySeznam.Node<E>> hlava = new AtomicReference<AtomickySeznam.Node<E>>(dummy); 20 private final AtomicReference<Node<E>> konec = new AtomicReference<AtomickySeznam.Node<E>>(dummy); 37/49
38 Neblokující seznam: Michael-Scott, public boolean put(e polozka) { 24 AtomickySeznam.Node<E> newnode = new AtomickySeznam.Node<E>(polozka, null); 26 while (true) { AtomickySeznam.Node<E> curkonec = konec.get(); 28 AtomickySeznam.Node<E> konecnext = curkonec.next.get(); if (curkonec == konec.get()) { 30 if (konecnext!= null) { // dokoncime rozpracovany stav - posuneme konec 32 konec.compareandset(curkonec, konecnext); else { 34 // pokusime se vlozit if (curkonec.next.compareandset(null, newnode)) { 36 // pri uspechu se pokusime posunout konec konec.compareandset(curkonec, newnode); 38 return true; /49
39 Problém ABA Problém, jak detekovat změnu A B A podpora HW: LL/SC verzování : počítadlo změn AtomicStampedReference odkaz + int počítadlo změn AtomicMarkedReference odkaz + boolean indikátor některé algoritmy používají indikátor k označení uzlu v seznamu jako smazaného 39/49
40 Concurrent Collections optimalizace kolekcí na výkon při paralelních přístupech CopyOnWriteArrayList, CopyOnWriteArraySet optimalizované pro režim čti-často-měň-zřídka CopyOnWriteArraySet obdoba HashSet CopyOnWriteArrayList obdoba ArrayList, na rozdíl od Vector poskytuje složené operace iterace poskytuje pohled na objekt v době konstrukce iterátoru 1 import java.util.concurrent.*; 3 public class CoW { CopyOnWriteArraySet cowas = new CopyOnWriteArraySet(); 5 CopyOnWriteArrayList cowal = new CopyOnWriteArrayList(); public void narabaj() { 7 cowas.addall(kolekce); cowas.contains(o); 9 cowas.clear(); 11 cowal.addallabsent(kolekce); cowal.addifabsent(o); 13 cowal.retainall(kolekce); 15 40/49
41 Concurrent Collections ConcurrentHashMap kolekce optimalizovaná na vyhledávání prvků mnohem lepší výkon v porovnání se synchronizedmap a Hashtable Threads ConcurrentHashMap [ms/10 Mops] Hashtable [ms/10 Mops] 1 1,00 1,03 2 2,59 32,40 4 5,58 78, ,21 163, ,58 341, ,27 778,41 úspěšná operace get() obvykle proběhne bez zamykání na iteraci se nezamyká celá kolekce mírně relaxovaná sémantika při získávání prvků je možné najít i prvek, jehož vkládání ještě není dokončeno (nikdy však nesmysl) iterátor může ale nemusí reflektovat změny od té doby, co byl vytvořen synchronizedmap a Hashtable lze nahradit tam, kde se nespoléhá na zamykání celé tabulky 41/49
42 Concurrent Collections ConcurrentHashMap 1 import java.util.concurrent.concurrenthashmap; 3 public class CHT { ConcurrentHashMap cht = new ConcurrentHashMap(10); 5 public void narabaj() { 7 cht.put(klic, objekt); cht.putall(mapa); 9 cht.putifabsent(klic, objekt); cht.containskey(klic); 11 cht.containsvalue(objekt); // take contains() cht.entryset(); 13 cht.keyset(); cht.values(); 15 cht.clear(); 17 42/49
43 Explicitní zamykání potřeba jemnějšího zamykání zvýšení výkonu např. paralelizace read-only přístupů potřeba rozšířené funkcionality ReentrantLock ekvivalent synchronized, pouze explicitní rozšířené schopnosti (např. gettery) nezapomenou správně odemknout 1 import java.util.concurrent.locks.reentrantlock; 3 public class RELock { public static void main(string[] args) { 5 ReentrantLock relock = new ReentrantLock(); relock.lock(); 7 try { Thread.sleep(1000); 9 // kod catch (InterruptedException e) { 11 finally { relock.unlock(); /49
44 Explicitní zamykání ReentrantReadWriteLock paralelizace na čtení, exkluzivní přístup na zápis reentrantní zámek jak pro čtení, tak pro zápis politiky: writer preference fair specifikací v konstruktoru downgrade zámku: získání read zámku před uvolněním write zámku neumožňuje upgrade zámku instrumentace pro monitoring (informace o držení zámků) nikoli pro synchronizaci! možno si naimplementovat vlastní zámky, např. RW zámek s podporou upgrade ReentrantReadWriteLock-upgrading.html upgrade je nevýhodný z pohledu výkonu 44/49
45 Explicitní zamykání 1 import java.util.concurrent.locks.reentrantreadwritelock; 3 public class RWLock { boolean cachevalid = false; 5 public void pouzijcache() { // rwlock s fair politikou 7 ReentrantReadWriteLock rwlock = new ReentrantReadWriteLock(true); rwlock.readlock().lock(); 9 if (!cachevalid) { rwlock.readlock().unlock(); 11 rwlock.writelock().lock(); if (!cachevalid) { // znovu zkontroluj, 13 // neumime upgrade bez preruseni // uloz data do cache 15 cachevalid = true; 17 // rucni downgrade zamku rwlock.readlock().lock(); // jeste drzim na zapis 19 rwlock.writelock().unlock(); 21 // pouzij data rwlock.readlock().unlock(); 23 45/49
46 Explicitní zamykání Conditions čekání na splnění podmínky interface Condition { void await() throws IE; boolean await(long time, TimeUnit unit) throws IE; long awaitnanos(long nanostimeout) throws IE; void awaituninterruptibly() boolean awaituntil(date deadline) throws IE; void signal(); void signalall(); 46/49
47 Explicitní zamykání Conditions výhody oproti wait()/notify() více podmínek per zámek final Lock zamek = new ReentrantLock(); final Condition neplny = zamek.newcondition(); final Condition neprazdny = zamek.newcondition(); absolutní a relativní timeouty po návratu se dozvíme, proč jsme se vrátili možnost nepřerušitelného čekání (nereaguje na metodu interrupt) může se vyskytnout spurious wakeup je třeba používat idiom ověřování stavu podmínky! :( 47/49
48 1 import java.util.concurrent.locks.*; Explicitní zamykání 3 public class OmezenyBuffer { Lock lock = new ReentrantLock(); 5 Condition notfull = lock.newcondition(); Condition notempty = lock.newcondition(); 7 Object[] items = new Object[100]; int putptr, takeptr, count; 9 public void put(object x) throws InterruptedException { lock.lock(); 11 try { while (count == items.length) notfull.await(); 13 items[putptr] = x; if (++putptr == items.length) putptr = 0; 15 ++count; notempty.signal(); 17 finally { lock.unlock(); public Object take() throws InterruptedException { lock.lock(); 23 try { while (count == 0) notempty.await(); 25 Object x = items[takeptr]; if (++takeptr == items.length) takeptr = 0; 27 --count; notfull.signal(); 29 return x; finally { 31 lock.unlock(); /49
49 Programování v reálném čase P. Dibble: Real-Time Java Platform Programming Interoperability with non-rt code, tradeoffs in real-time development, and RT issues for the JVM software Garbage collection, non-heap access, physical and "immortal"memory, and constant-time allocation of non-heap memory Priority scheduling, deadline scheduling, and rate monotonic analysis Closures, asynchronous transfer of control, asynchronous events, and timers 49/49
Vláknové programování část III
Vláknové programování část III Lukáš Hejmánek, Petr Holub {xhejtman,hopet}@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2013 03 04 1/60 Přehled přednášky Vlákna v jazyce Java Paralelní
ZOS 9. cvičení, ukázky kódu. Pavel Bžoch
ZOS 9. cvičení, ukázky kódu Pavel Bžoch Obsah Komunikace mezi procesy Atomické operace TSL a CAS Zámky Semafory Semafory vypsání věty Monitor Bariéra pomocí monitoru Implementace semaforu pomocí monitoru
Paralelní programování
Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 17 Monitor Semafor vedle aktivní (čekací smyčka, busy-wait) i pasivní implementace
Vláknové programování část V
Vláknové programování část V Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2014 03 25 1/25 Přehled přednášky Paměťový model Javy GUI v Javě Vlákna
Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.
Operační systémy Tomáš Hudec 7 Prostředky programovacích jazyků pro IPC Obsah: 7.1 Monitor, 7.1.1 Použití monitoru pro řízení přístupu do kritické sekce, 7.1.2 Použití monitoru pro synchronizaci, 7.1.3
Principy operačních systémů. Lekce 6: Synchronizace procesů
Principy operačních systémů Lekce 6: Synchronizace procesů Kritická sekce Při multitaskingu (multithreadingu) různé procesy často pracují nad společnou datovou strukturou (např. zápis a čtení do/z fronty)
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
Java. Synchronizace v Javě
Java Předpokládá se znalost práce s vlákny a Java concurrency o Viz KIV/PGS o V PPR jenom to, co nebylo jinde JVM bylo původně navrženo pro Javu, dnes lze však i z jiných jazyků produkovat bytecode JVM
boolean hasnext() Object next() void remove() Kolekce
11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída
Procesy a vlákna - synchronizace
ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna - synchronizace České vysoké učení technické Fakulta elektrotechnická 2010 Studijní materiály a informace o předmětu http://measure.feld.cvut.cz/vyuka/predmety/bakalarske/navody
Vlákna. První jednoduchý program s vlákny:
Vlákna Současné operační systémy jsou víceúlohové. Z uživatelského pohledu se zdá, že běží několik úloh zároveň. Je tedy možné napsat i jeden program tak, aby v něm běželo vedle sebe několik relativně
Fronty (Queue) v JDK 1.5 (1.6) Java.vse.cz
Fronty (Queue) v JDK 1.5 (1.6) Java.vse.cz java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks Knihovny, které jsou nepostradatelné Ve verzi 1.5 jazyka Java byly přidány nové třídy
Vlákna. První jednoduchý program s vlákny:
Vlákna Současné operační systémy jsou víceúlohové. Z uživatelského pohledu se zdá, že běží několik úloh zároveň. Jednotlivé úlohy se nazývají procesy nebo také vlákna (tento termín používá i Java). Operační
Paralelní programování
Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 16 Semafory Await synchronizace používající await běží na železe = využívají
30. Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (A7B36PVJ)
30. Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (A7B36PVJ) Procesy a vlákna Proces Každá aplikace je vlastně běžící proces. Pokud je aplikace spuštěna vícekrát, vytvoří
Operační systémy. Přednáška 4: Komunikace mezi procesy
Operační systémy Přednáška 4: Komunikace mezi procesy 1 Časově závislé chyby Dva nebo několik procesů používá (čte/zapisuje) společné sdílené prostředky (např. sdílená paměť, sdílení proměnné, sdílené
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;
Cvičení 9 - Monitory na rozdíl od semaforů je monitor jazyková konstrukce monitor = Pascalský blok podobný proceduře nebo fci uvnitř monitoru jsou definovány proměnné, procedury a fce proměnné monitoru
Paralelní programování
Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 11 Literatura Ben-Ari M.: Principles of concurrent and distributed programming.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
Vícevláknové aplikace
Vícevláknové aplikace Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek, 2017 B0B36PJV Přednáška
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
1. Téma 12 - Textové soubory a výjimky
1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se
Paralelní programování
Paralelní programování cvičení Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 13 Cvičení 1 Jazyk C POSIX Threads (UNIX) hlavičkový soubor pthread.h, knihovna
Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21
Stručný obsah 1. Hardware, procesory a vlákna... 19 2. Programování s ohledemna výkon... 45 3. Identifikování příležitostí pro paralelizmus... 93 4. Synchronizace a sdílení dat... 123 5. Vlákna v rozhraní
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
Paralelní programování
Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 14 Atomické akce dále nedělitelná = neproložitelná jiným procesem izolovaná =
KTE / ZPE Informační technologie
4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší
7. Dynamické datové struktury
7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
Principy počítačů a operačních systémů
Principy počítačů a operačních systémů Operační systémy Synchronizace procesů, zablokování Zimní semestr 2011/2012 Přístup ke sdíleným datům Terminologie: souběžné vs. paralelní zpracování Paralelní provádění
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu
Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní
Datové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu
Procesy, vlákna Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu Implementace vláken one-to-one o implementace na úrovni jádra o každé vlákno je pro
IRAE 07/08 Přednáška č. 7. Začátek (head)
Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti
14.4.1. Typický prvek kolekce pro české řazení
14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení
Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu. 6.1.1 Obědvající filosofové
Operační systémy Tomáš Hudec 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu, 6.1.1 Obědvající filosofové, 6.1.2 Producenti a konzumenti, 6.1.3 Problém spících holičů, 6.1.4 Problém pisatelů
VIII. Seminář Java VIII p.1/36
Seminář Java VIII Seminář Java VIII p1/36 Rekapitulace Grafické uživatelské rozhraní Swing vs AWT Aplety Aplikační rámec, JApplet spouštení v prohlížeči, Appletviewer Událostní model knihovny Swing události
Paralelní programování
Paralelní programování přednášky Jan Outrata únor květen 2011 Jan Outrata (KI UP) Paralelní programování únor květen 2011 1 / 15 Simulátor konkurence abstrakce = libovolné proložení atom. akcí sekvenčních
Z. Kotala, P. Toman: Java ( Obsah )
Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například
Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Pokročilé programování na platformě Java. Úvod
Pokročilé programování na platformě Java Úvod O předmětu Petr Hnětynka hnetynka@d3s.mff.cuni.cz http://d3s.mff.cuni.cz/teaching/vsjava/ pokračování "Javy (NPRG013)" předpokládá se základní znalost Javy
Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4
Fronta (Queue) Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Fronta uplatňuje mechanismus přístupu FIFO first
Paralelní programování
Paralelní programování přednáška 5 Michal Krupka 15. března 2011 Michal Krupka (KI UP) Paralelní programování 15. března 2011 1 / 13 Ještě ke kritickým sekcím Použití v praxi obvykle pomocí zámků (locks)
Soubor jako posloupnost bytů
Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení
Iterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, / 23
Operační systémy Správa procesoru Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, 2014 1 / 23 Procesy (1/2) neformálně: proces = běžící
7. Datové typy v Javě
7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů
2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace
Principy počítačů a operačních systémů Operační systém procesy a vlákna plánování interakce a synchronizace Základní pojmy proces vykonávaný program vlákno (thread) oddělení místa vykonávání instrukcí
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Programovací jazyky s podporou vláken Java
Programovací jazyky s podporou vláken Java Co je to vlákno? Hierarchie z pohledu operačního systému: Proces o největší výpočetní entita plánovače o vlastní prostředky, paměť a další zdroje o v závislosti
Algoritmizace a programování
Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém
Vláknové programování část II
Vláknové programování část II Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2012 02 28 1/56 Přehled přednášky Ada Základy jazyka GNAT Viditelnost
Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha
NIO Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Seminář Java IV p.1/38
Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 11. březen, 2011
Operační systémy Správa procesoru Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 11. březen, 2011 Petr Krajča (UP) KMI/XOSY: Přednáška III. 11. březen, 2011 1 / 18 Procesy (1/2) neformálně:
Java Výjimky Java, zimní semestr
Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní
04. Mutexy, monitory. ZOS 2006, L. Pešička
04. Mutexy, monitory ZOS 2006, L. Pešička Administrativa změna termínů zápočtových testů 7.11.2006 (út), EP130, 18:30 12.12.2006 (út), EP130, 18:30 Semafory Ošetření kritické sekce ukázka více nezávislých
C++ 0x aka C++11. Základním kamenem je třída std::thread
C++ 0x aka C++11 Jako jiné jazyky, např. Free/Object Pascal, se C++ ve standardu ++0x dočkal podpory vláken Výhodou je, že standardní knihovna je platformě nezávislá na úrovni zdrojového kódu Základním
Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20
Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................
JAVA V Vlákna Java, zimní semestr
JAVA Vlákna 1 Přehled (thread) podpora pro vícevláknové aplikace přímo v jazyce "hlavní" vlákno aplikace metoda main() v JVM je vždy několik vláken záleží na implementaci JVM skončí až skončí všechna vlákna
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty
Vlákna a přístup ke sdílené paměti B4B36PDV Paralelní a distribuované výpočty Minulé cvičení: Paralelizace nám může pomoct... 1 Minulé cvičení: Paralelizace nám může pomoct... B4B36PDV: Ale ne všechny
1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:
Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Procesy a vlákna (Processes and Threads)
ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna (Processes and Threads) Správa procesů a vláken České vysoké učení technické Fakulta elektrotechnická 2012 Použitá literatura [1] Stallings, W.: Operating
Principy objektově orientovaného programování
Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
9. přednáška - třídy, objekty
třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Java - výjimky. private void vstup() throws IOException {... }
Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace
Návrh softwarových systém. Návrh softwarových systémů
Návrh softwarových systém ů - Java 8 Jiří Šebek Návrh softwarových systémů (B6B36NSS) Co je nového? Default interface methods Lambda expressions Method references and repeatable annotations Streams Functional
Architektury paralelních počítačů II.
Architektury paralelních počítačů II. Sekvenční konzistence paměti Implementace synchronizačních událostí Ing. Miloš Bečvář s použitím slajdů Prof. Ing. Pavla Tvrdíka, CSc. Osnova přednášky Opakování definice
Projekty pro výuku programování v jazyce Java
JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil
Lineární datové struktury
Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Lineární datové
Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP.
Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP. Dvě sémantiky vzhledem k hodnotám čítače: 1. čítač >= 0 Operace DOWN zkontroluje
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář
Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění
Dynamické datové struktury I.
Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
ADT/ADS = abstraktní datové typy / struktury
DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní
Programování v Javě I. Únor 2009
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory