Multithreading vícevláknovost

Rozměr: px
Začít zobrazení ze stránky:

Download "Multithreading vícevláknovost"

Transkript

1 Multithreading vícevláknovost 1 aktivní objekty a jejich životní pravidla práce s vlákny prostředky pro paralelní programování vlákna podprocesy, sdílejí datové zdroje s konkurentností (souběžností) se setkáváme v API specifikaci - aplikace obsahuje běhová vlákna, kde každé vlákno určuje část programu, který může běžet souběžně s ostatními vlákny

2 Obsah přednášky 2 1. Úvod 2. Vlákno 3. Implementace vlákna 4. Vlákna uživatele a démoni 5. Priority vláken, plánování běhu vláken 6. Stavy vláken 7. Metoda jion() 8. Synchronizace vláken 9. Komunikace mezi vlákny 10. Deadlock uváznutí

3 1 Úvod 3 Concurrency (souběžnost) - normálně dostupná v primitivních operacích operačního systému Java má podporu pro vícevláknové zpracování zabudovanou v sobě (provides built-in multithreading) Multithreading zlepšuje výkonnost některých programů např. browserů a těch, kde je souběžnost implicitní Úlohy na prohledávání, vykreslování mohou využít svůj implicitní charakter souběžnosti

4 Procesy & vlákna 4 Proces Kód Data Status procesu Zdroje Abstraktní prostředí stroje (OS)

5 Procesy & vlákna 5 lightweight processes Vlákna Data Status vlákna Text programu Data Status procesu Zdroje Heavyweight process

6 2 Vlákno - thread 6 Vlákno je podobné sekvenčním programům Samotné vlákno není program; nemůže běžet samo o sobě; vlákno spíše běží uvnitř programu Vlákno je jeden sekvenční tok řízení v kontextu programu Hlavní využití vláken není v použití jednoho sekvenčního vlákna, ale ve využití více vláken běžících ve stejném čase, vykonávající různé úlohy daného programu.

7 Program - vlákno 7 Vlákno Program Program Dvě vlákna Vlákno spuštěné v kontextu programu Dvě vlákna současně spuštěná v kontextu jednoho programu

8 Vlákno 8 Někdy se vlákna proto nazývají lightweight process a procesy (heavyweight process) Vlákno je podobné procesu reálného světa má jeden sekvenční tok řízení Avšak vlákno se nazývá lightweight, protože běží uvnitř kontextu programu a využívá výhody, že zdroje jsou přiděleny programu a jeho prostředí. Vlákno si musí pro sebe získat některé zdroje uvnitř běžícího programu.

9 Vlákno 9 Vlákno má vlastní zásobník běhu (execution stack) a čítač programu (program counter) Kód prováděný ve vlákně funguje pouze tomto kontextu (kontextu programu). Program má vždy alespoň jedno vlákno, to jedno začíná od metody main(). (main vlákno) Když program vytvoří vlákno, je toto nové vlákno vytvořeno navíc k vláknu, které jej vytvořilo. Každé další vytvořené vlákno (mimo implicitní vlákno main) je představováno objektem třídy Thread, balíčku java.lang.thread.

10 import java.io.ioexception; public class TryThread extends Thread { private String firstname; // Store for first name private String secondname; // Store for second name private long awhile; // Delay in milliseconds Osnova 10 Jednoduchý příklad subclassing (dědičnost) // konstruktor public TryThread(String firstname, String secondname, long delay) { this.firstname = firstname; // Store the first name this.secondname = secondname; // Store the second name awhile = delay; // Store the delay setdaemon(true); // Thread is daemon public static void main(string[] args) { // Create three threads Thread first = new TryThread("Hopalong ", "Cassidy ", 200L); Thread second = new TryThread("Marilyn ", "Monroe ", 300L); Thread third = new TryThread("Slim ", "Pickens ", 500L); System.out.println("Press Enter when you have had enough...\n"); n"); first.start(); // Start the first thread second.start(); // Start the second thread third.start(); // Start the third thread

11 try { System.in.read read(); // Wait until Enter key pressed System.out out.println println(" ("Enter pressed......\n"); catch (IOException e) // Handle IO exception { System.out out.println println(e); // Output the exception System.out out.println println(" ("Ending main()"); return; Osnova 11 sleep() uvolní procesor, ale neuvolní objekty, které jsou aktuálním vláknem uzamknuty // Method where thread execution will start public void run() { try { while(true ) // Loop indefinitely... { System.out out.print print(firstname firstname); // Output first name sleep(awhile awhile); // Wait awhile msec. System.out out.print print(secondname + "\n");" // Output second name catch(interruptedexception e) // Handle thread interruption { System.out out.println println(firstname + secondname + e); // Output the exception

12 Press Enter when you have had enough... Osnova 12 Hopalong Marilyn Slim Cassidy Hopalong Monroe Marilyn Cassidy Hopalong Pickens Slim Cassidy Hopalong Monroe Marilyn Cassidy Hopalong Monroe Marilyn Pickens Slim Cassidy Hopalong Cassidy Hopalong Monroe Marilyn Enter pressed... Ending main()

13 Jednoduchý příklad implementace rozhraní Runnable 13 vlákno main načte počet opakování zadaný uživatelem hlavní program (vlákno main) vytvoří instanci theapp, která vykoná metodu doit() v metodě doit se vytvoří vlákno na které odkazuje proměnná t Thread first = new Thread( Jak, se,45l); Thread t = new Thread(this); v prvém případě - defaultní běhuschopný cíl ve druhém odkazuje na třídu, jejíž objekt implementoval metodu run()

14 class ThreadEx1 implements Runnable { private static int howmany; private void doit() { Thread t = new Thread( this ); t.start(); //*** startuje nove vytvorene vlakno for ( int i = 0; i < howmany; i++ ) System.out out.println println( "Prvni" vlakno" ); public void run() { //*** implementace metody run() for ( int i = 0; i < howmany; i++ ) System.out out.println println( "Druhe" vlakno" ); //*** t se zastavi, když se dostane na konec run() public static void main( String[ ] args ) throws Exception { if ( args.length < 1 ) throw new Exception( "\n\ninvoke ninvoke as: ThreadEx1 <how< many iterations>\n" n" ); howmany = new Integer( args[ 0 ] ).intvalue intvalue(); ThreadEx1 theapp = new ThreadEx1(); theapp.doit doit(); //*** main Thread stops when main exits Osnova 14 Výsledky aplikace: Prvni vlakno Druhe vlakno Prvni vlakno Druhe vlakno Prvni vlakno Druhe vlakno Na různých JVM - různé

15 Vysvětlení 15 běhuschopný cíl (runnable target) objekt, jehož třída implementuje metodu run() theapp je pouze instance vytvořená vláknem main this a theapp se odkazují na stejný objekt třídy ThreadEx1

16 Zastavení vláken 16 zastavení vláken se provede prostřednictvím instanční metody interrupted() metoda pouze signalizuje vláknu, že je přerušené vlákno pokračuje ve svéčinnosti dále. kontrola příznaku se provádí např. v metodě sleep(). Metoda sleep() kontroluje, zda bylo vlákno přerušeno a pokud ano, vyvolá výjimku typu InterruptedException.

17 import java.io.ioexception; Osnova 17 public class TryThread1 extends Thread { private String firstname; // Store for first name private String secondname; // Store for second name private long awhile; // Delay in milliseconds public TryThread1(String firstname, String secondname, long delay) { this.firstname = firstname; // Store the first name this.secondname = secondname; // Store the second name awhile = delay; // Store the delay //setdaemon(true setdaemon(true); // Thread is daemon public static void main(string[] args) { // Create three threads Thread first = new TryThread("Hopalong ", "Cassidy ", 200L); Thread second = new TryThread("Marilyn ", "Monroe ", 300L); Thread third = new TryThread("Slim ", "Pickens ", 500L); System.out.println("Press Enter when you have had enough...\n"); n"); first.start(); // Start the first thread second.start(); // Start the second thread third.start(); // Start the third thread

18 try { System.in.read read(); // Wait until Enter key pressed System.out out.println println(" ("Enter pressed......\n"); Osnova 18 // Interrupt the threads first.interrupt interrupt(); second.interrupt interrupt(); third.interrupt interrupt(); catch (IOException e) // Handle IO exception { System.out out.println println(e); // Output the exception System.out out.println println(" ("Ending main()"); return; // Method where thread execution will start

19 public void run() { try { while(true ) // Loop indefinitely... { System.out out.print print(firstname firstname); // Output first name sleep(awhile awhile); // Wait awhile msec. System.out out.print print(secondname + "\n");" // Output second name Osnova 19 catch(interruptedexception e) // Handle thread interruption { // Output the exception System.out out.println println(firstname + secondname + e); Hopalong Pickens Slim Monroe Marilyn Cassidy Hopalong Cassidy Hopalong Enter pressed... Hopalong Cassidy java.lang.interruptedexception: : sleep interrupted Ending main() Slim Pickens java.lang.interruptedexception: : sleep interrupted Marilyn Monroe java.lang.interruptedexception: : sleep interrupted

20 3 Implementace vlákna Vytvoření podtřídy od třídy Thread a předeklarováním (zastíněním) metody run new Thread(this).start(); vlákna jsou vytvořena a odstartovaná uvnitř třídy 2. Implementací rozhraní Runnable new MyThread().start(); vytvoří a odstartuje vlákno třídy MyThread, které provede zastíněnou (předeklarovanou) metodu run třídy MyThread

21 Ukončení programu vícevláknové aplikace 21 V metodě run se deklarují tzv. životní pravidla daného vlákna. Pokud se vlákno dostane na konec metody run je jeho život ukončen Příklad nekonečné smyčky vlákno main je ukončeno, některá další vlákna pokračují

22 class RunForever implements Runnable { public static void main( String[ ] args ) { RunForever me = new RunForever(); // instance System.out out.println println( "main" thread about to exit!" ); new Thread( me ).start(); //*** main exits so main Thread stops public void run() { while ( true ) { System.out out.println println( "2nd Thread says 'hi hi!'..." ); try { Thread.sleep sleep( 10 ); // pause 10 milliseconds catch( InterruptedException e ) { System.err err.println println( e ); Osnova 22

23 main thread about to exit! Osnova 23

24 4 Vlákna uživatele a démoni User and Daemon Threads 24 Vlákna mohou být dvou typů: vlákna uživatele (doposud) démoni pokud skončí vlákno main, skončí také metody: setdeamon(boolean); isdaemon();

25 class NotRunForever implements Runnable { //*** vlakno main je uzivatelske ne vlakno demonu public static void main( String[ ] args ) { NotRunForever me = new NotRunForever(); Thread t1 = new Thread( me ); t1.setdaemon setdaemon( true ); //*** t1 je demon, ne uzivatelske vlakno t1.start(); try { Thread.sleep sleep( 50 ); //*** vlakno main catch( InterruptedException e ) { System.err err.println println( e ); System.out out.println println( "main" thread about to exit!" ); //*** main konci, t1 zastavuje, aplikace konci Osnova 25 public void run() { while ( true ) { System.out out.println println( "2nd Thread says 'hi hi!'..." ); try { Thread.sleep sleep( 10 ); // pauza 10 milisekund catch( InterruptedException e ) { System.err err.println println( e );

26 main thread about to exit! Osnova 26 Výpis aplikace

27 5 Priority vláken a plánování vláken Thread Priorities and Thread Scheduling 27 Java thread priority Priority v rozsahu 1-10 Timeslicing dávkováníčasu Každé vlákno dostane přidělený čas procesoru (nazvaný kvantum) Nechává běžet vlákna s nejvyšší prioritou Pravidelná alternace mezi vlákny dané priority víceúrovňová fronta s prioritami pro plánování běhu vláken (další obrázek)

28 Priorita vláken příklad plánování 28 Ready threads Thread.MAX_PRIORITY Priority 10 A B Priority 9 C Priority 8 Priority 7 D E F Priority 6 G Thread.NORM_PRIORITY Priority 5 H I Priority 4 Priority 3 Priority 2 J K Thread.MIN_PRIORITY Priority 1

29 class ThreadPriority implements Runnable { public static void main( String[ ] args ) { ThreadPriority tp = new ThreadPriority(); tp.testpriority testpriority(); public void run() { while ( true ) System.out out.println println( Thread.currentThread currentthread(). ().getname getname() ); private void testpriority() { Thread t1 = new Thread( this, "Normalni" priorita" ); t1.start(); //*** starts first Thread t2 = new Thread( this, "Max priorita" ); t2.setpriority setpriority( Thread.MAX_PRIORITY ); t2.start(); Osnova 29

30 Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Normalni priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Max priorita Osnova 30

31 6 Stavy vláken: Životní cyklus vlákna (životní pravidla) 31 Stavy vláken Born state stav vytvoření Vlákno bylo právě vytvořeno Ready state Vlákno vyvolalo metodu start Vlákno nyní může být vykonáváno (execute) Running state Vláknu je přidělen procesor a běží (is running) Dead state Vlákno dokončilo nebo ukončilo svoji činnost Vlákno ukončeno systémem

32 Životní cyklus vlákna stavový diagram start Ready 32 Born thread dispatch (assign a processor) quantum expiration yield I/O completes acquire lock interrupt Running notify notifyall enter synchronized statement timeout expires interrupt issue I/O request complete sleep wait Blocked Sleeping Waiting Když se vlákno ukončí (návrat z metody run), dosáhne stavu ukončení - Dead (konečný stav) sleep interval expires interrupt

33 Jak učinit vlákno neběžícím 33 Vyvolat metodu sleep() Vlákno vyvolá metodu wait() a čeká na splnění specifické podmínky a uvolňuje objekty, které jsou s aktuálním vláknem uzamknuty Vlákno je blokováno vstupně/výstupními operacemi Vyvolat metody yield() (vzdává se činnosti)

34 Zastavení stopnutí vlákna 34 Přirozeně, když se dostane v metodě run na konec svých životních pravidel příkazem System.exit(0); thread.interrupt();

35 Metoda join() 35 Čekání, až jiné vlákno zanikne; na jiné vlákno se použije metoda join(). Metoda join() zadrží aktuální vlákno tak dlouho, dokud určené vlákno nezanikne. Dá se proto částečně použít k synchronizaci vláken. Následující program dvě vlákna plus a minus (přičítá, odečítá 1) se střídají pomocí metody join() výsledný součet pro malé N nulový pro velké N různé výsledky

36 class SyncEx1 { public static void main( String[ ] args ) { if ( args.length < 1 ) { System.err err.println println( "java" SyncEx1 <loops< per thread>" ); System.exit( -1 ); int n = Integer.parseInt parseint( args[ 0 ] ); // iteraci na vlakno MyThreadE plus = new MyThreadE( +1, n ), // plus zvysi minus = new MyThreadE( -1, n ); // minus snizi plus.start(); minus.start(); // ceka az obe vlakna dokonci, pred tiskem vysledku try { plus.join join(); minus.join join(); //main ceka na ukonceni plus a minus catch( InterruptedException e ) { System.out out.println println( n + " iterations each: " + MyThreadE.shared ); class MyThreadE extends Thread { static int shared; //*** sdilene vsemi objekty MyThreadE private int n; private int t; MyThreadE( int type, int howmany ) { t = type; n = howmany; public void run() { for ( int i = 0; i < n; i++ ) if ( t > 0 ) shared = shared + 1; else shared = shared - 1; Osnova 36

37 Kritická sekce vzájemné vyloučení Mutual Exclusion 37 Kritická sekce část kódu, ke které musí mít vlákno výlučný (exklusivní) přístup. Operace: shared = shared + 1; se skládá ze součtu a přiřazení (2 atomické operace) Může být rozdělena na dvěčásti dostaneme chybné výsledky

38 Synchronizace 38 Nutná synchronizace Cíl synchronizace v případě, že několik vláken vyžaduje přístup k jedinému zdroji, mohl tento přístup v jediném okamžiku dostat jen jedno vlákno. Možnosti synchronizace: na úrovni metod synchronizovat celé metody na úrovni bloků pomocí synchronizace bloků. Klíčové slovo synchronized způsobí, že metody, bloky se budou chovat jako atomické - nedělitelné

39 Synchronizované metody 39 class MojeTrida { public synchronized void metoda1() { // kód metody... public synchronized void metoda2() { // kód metody public void metoda3() { //kód metody

40 class MyThreadS extends Thread { static int shared; //*** sdilene vsemi objekty MyThreadS private int n; private int t; private synchronized void plusorminus(){ if(t>0) shared = shared + 1; else shared = shared - 1; MyThreadS( int type, int howmany ) { t = type; n = howmany; public void run() { plusorminus(); //for ( int i = 0; i < n; i++ ) // if ( t > 0 ) // shared = shared + 1; // else // shared = shared - 1; Osnova 40 Zabezpečí pouze výlučný přístup exkluzivní přístup

41 Synchronizované bloky 41 Pružnější mechanismus než synchronizované metody, protože se váže pouze na blok a daný objekt, který je buď uzamknutý, nebo odemčený. Každá instance třídy java.lang.object, nebo libovolný potomek si udržuje zámek (někdy zvaný monitor ) jedná se u určitou formu detekce stavu s cílem poskytnout výhradní přístup k danému prostředku klíčové slovo synchronized je vždy implicitně nebo explicitně přidruženo k instanci typu Object

42 Synchronizované bloky 42 Předtím, než je vláknu dovoleno vstoupit do synchronizovaného bloku musí získat zámek objektu přidruženého k danému kódu. Pokud jedno vlákno zámek získá, jiné jej nezíská a jeho běh bude blokovaný do doby, než bude zámek uvolněn. Kromě zámku si ještě každý objekt udržuje seznam blokovaných vláken pokud vlákno nemůže získat zámek objektu, je automaticky uloženo do seznamu (fronty) a pak z něho vybráno.

43 class Bank { // Perform a transaction public void dotransaction(transaction transaction) { int balance = transaction.getaccount getaccount(). ().getbalance getbalance(); Osnova 43 switch(transaction transaction.gettransactiontype gettransactiontype()) { case Transaction.CREDIT: synchronized(transaction transaction.getaccount getaccount()) { // Get current balance int balance = transaction.getaccount getaccount(). ().getbalance getbalance(); // Credits require a lot of checks... try { Thread.sleep sleep(100); catch(interruptedexception e) { System.out out.println println(e); balance += transaction.getamount getamount(); // Increment the balance // Restore account balance transaction.getaccount getaccount(). ().setbalance setbalance(balance); break;

44 case Transaction.DEBIT: synchronized(transaction transaction.getaccount getaccount()) { // Get current balance int balance = transaction.getaccount getaccount(). ().getbalance getbalance(); Osnova 44 // Debits require even more checks... try { Thread.sleep sleep(150); catch(interruptedexception e) { System.out out.println println(e); balance -= transaction.getamount getamount(); // Decrement the balance // Restore account balance transaction.getaccount getaccount(). ().setbalance setbalance(balance); break; default: // We should never get here System.out out.println println("invalid transaction"); System.exit(1); // Restore the account balance transaction.getaccount getaccount(). ().setbalance setbalance(balance);

45 Komunikace mezi vlákny 45 Probrali jsme uzamčení metod nebo bloků kódu pomocí synchronizace Používáme příkaz while k testování stavu vlákna v časových intervalech daných voláním metody sleep() není nejlepšířešení Třída Object definuje metody wait(), notify() a notifyall() účinnějšířešení situace 1. Tyto metody dědí všechny podtřídy třídy Object 2. Mohou být volány jen zevnitř synchronizovaných metod nebo zevnitř synchronizovaného bloku kódu.

46 Komunikace mezi vlákny 46 Při vyvolání odjinud bude vyvolána výjimka IllegalMonitorStateException Základní myšlenkou metod wait() a notify() je poskytnout metodám nebo blokům kódu, které jsou synchronizovány konkrétním objektem, prostředek ke komunikaci. jedem blok může volat wait() k pozastavení svých operací, dokud nějaká jiná metoda nebo blok kódu synchronizovaný stejným objektem jej nějakým způsobem nezmění a nezavolá notify(), čímž naznačí dokončení změny.

47 Metoda wait() wait(long caslim) notify() notifyall() Popis Metoda pozastaví aktuální vlákno až do doby volání metody notify() nebo notifyall() pro objekt, ke kterému patří metoda wait(). Při zavolání této metody vlákno uvolní synchronizační zámek, který má na objektu, takže se může provádět jakákoli jiná metoda nebo blok kódu, které jsou synchronizovány stejným objektem. Tato verze pozastaví aktuální vlákno dokud neuplyne stanovený počet milisekund, nebo není dříve zaslaná zpráva notify() nebo notifyall() objektu, ke kterému patří metoda wait().. Metodou se znova spustí vlákno, které vyvolalo metodu wait() objektu, ke kterému patří metoda notify(). Pokud pro tento objekt volalo wait() více objektů, není žádná kontrola nad tím, kterému z těchto vláken bude notify() určeno lépe použít notifyall(). Touto metodou se znovu spustí všechna vlákna, která volala metodu wait() objektu, ke kterému patří metoda notifyall(). 47

48 Příklad komunikace vláken 48 Metoda main vytvoří N (8) vláken třídy MyThreadW Třída MyThreadW má statické pole znaků sdílených objektů Každé vlákno má id a char (identifikátor a znak) začínající od 0 A Start se provádí v obráceném pořadí od 7 H Výpis je opět uspořádán od A H

49 class SyncWaitEx { public static void main( String[ ] args ) { final int n = 8; MyThreadW[ ] mt = new MyThreadW[ n ]; char c = 'A'; //*** vytvari a inicializuje vlakna for ( int i = 0; i < n; i++ ) mt[ i ] = new MyThreadW( i, c++ ); //*** startuje vlakna v obracenem poradi for ( int i = n - 1; i >= 0; i--i ) mt[ i ].start(); class MyThreadW extends Thread { private int id; //*** identifikator private char c; //*** znak, ktery se zapise do sdileneho pole private static int turn = 0; private static final int n = 8; private static char queue[ ] = new char[ n ]; //** sdilene pole public MyThreadW( int i, char ch ) { id = i; c = ch; public void run() { while ( true ) writechar(); Osnova 49

50 //*** synchronizace zabezpecujici pouze jedno vlakno v danem case // zapisuje do fronty apod. Vlakna cekaji, kdy prijdou na radu. private synchronized void writechar() { //*** uvolneni lock a ceka az prijde na radu while ( turn!= id ) try { wait( 20 ); // 20 milisekund catch( InterruptedException e ) { queue[ turn++ ] = this.c; if ( turn == n ) { //*** je fronta plna? System.out out.println println( queue ); //** pokud ano, vytiskni ji turn = 0; // a nastav poradi turn turn] na nulu notifyall(); //*** vzbudit cekajici vlakna Osnova 50 ABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH ABCDEFGH

51 Producent / konzument 51 Producent vyrábí, konzument konzumuje CubbyHole vyrovnávací a synchronizační buffer Testovací třída

52 public class Producer extends Thread { private CubbyHole cubbyhole; private int number; Osnova 52 public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { for (int i = 0; i < 10; i++) { cubbyhole.put(.put(number number, i); try { sleep(( ((int int)( )(Math Math.random random() * 100)); catch (InterruptedException e) {

53 public class Consumer extends Thread { private CubbyHole cubbyhole; private int number; Osnova 53 public Consumer(CubbyHole CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = cubbyhole.get get(number number);

54 public class CubbyHole { private int contents; private boolean available = false; Osnova 54 public synchronized int get(int who) { while (available == false) { try { wait(); catch (InterruptedException e) { available = false; System.out out.format format(" ("Consumer %d got: %d%n", who, contents); notifyall(); return contents; public synchronized void put(int who, int value) { while (available == true) { try { wait(); catch (InterruptedException e) { contents = value; available = true; System.out out.format format(" ("Producer %d put: %d%n", who, contents); notifyall();

55 public class ProducerConsumerTest { public static void main(string args[]){ CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c,1); Consumer c1 = new Consumer(c,1); Osnova 55 p1.start(); c1.start(); Producer 1 put: 0 Consumer 1 got: 0 Producer 1 put: 1 Consumer 1 got: 1 Producer 1 put: 2 Consumer 1 got: 2 Producer 1 put: 3 Consumer 1 got: 3 Producer 1 put: 4 Consumer 1 got: 4 Producer 1 put: 5 Consumer 1 got: 5 Producer 1 put: 6 Consumer 1 got: 6 Producer 1 put: 7 Consumer 1 got: 7 Producer 1 put: 8 Consumer 1 got: 8 Producer 1 put: 9 Consumer 1 got: 9

56 Deadlock - uváznutí 56 Uváznutí se týká vzájemné závislosti dvou vláken např. jedno vlákno provádí kód, který je synchronizovaný daným objektem (tenobjekt) pak má provést další metodu synchronizovanou jiným objektem (jinyobjekt) než k tomu dojde, druhé vlákno provede kód synchronizovaný jinyobjekt a potřebuje provést metodu obsahující kód synchronizovaný prvním objektem (tenobjekt) žádné vlákno nemá možnost pokračovat, obě uvázla

57 class DeadlockEx { public static void main( String[ ] args ) { new MyThread( "foo" foo" ).start(); new MyThread( "bar" ).start(); class MyThread extends Thread { public MyThread( String name ) { super( name ); public void run() { while ( true ) if ( getname(). ().equalsignorecase equalsignorecase( "foo" foo" ) ) foom(); else barm(); private synchronized void foom() { System.out out.println println( getname() + " vstup foom." ); while ( getname(). ().equalsignorecase equalsignorecase( "bar" ) ) try { wait(); // cekani na neurcito catch( InterruptedException e ) { barm(); // vyvola jinou synchronizacni metodu System.out out.println println( getname() + " vystup foom." ); notify(); // vzbudi jine vlakno, pokud nejake ceka Osnova 57

58 private synchronized void barm() { System.out out.println println( getname() + " vstup barm." ); while ( getname(). ().equalsignorecase equalsignorecase( "foo" foo" ) ) try { wait(); // cekani na neurcito catch( InterruptedException e ) { foom(); // vyvola jinou synchronozacni metodu System.out out.println println( getname() + " vystup barm." ); notify(); // vzbudi jine vlakno, pokud nejake ceka Osnova 58 foo vstup foom. bar vstup barm. foo vstup barm. bar vstup foom.

59 Uváznutí 59 Problémem uváznutí jsou vztahy mezi metodami wait(), notify() a notofyall(). Metoda wait() musí předcházet metodu notify(). Pokud je tomu naopak, vlákno nemůže být probuzeno. V uvedeném programu vlákno foo vykonává synchronizovanou nejdříve metodu foom() a poté synchronizovanou metodu barm(). Vlákno bar vykoná nejdříve synchronizovanou metodu barm() a potom synchronizovanou metodu foom(). Avšak každé vlákno čeká v metodě jména svého protějšku. Vlákno foočeká v metodě barm() a vlákno bar čeká v metodě foom().

60 Uváznutí 60 Vlákno foo získá zámek na barm a čeká. Vlákno foo může být probuzeno pouze vláknem bar, které vyvolá metodu notify() v metodě barm(). Vlákno foo nezíská zámek na barm() protože vlákno bar má aktuálně tento zámek. Dokud vlákno foo nezíská tento zámek, bude čekat.

61 Nejdůležitější konstruktory třídy Thread 61 Deklarace Thread(); Popis Nepojmenované vlákno s defóltním běhuschopným cílem. Thread(String s); Pojmenované vlákno s defóltním běhuschopným cílem. Thread(Runnable target); Nepojmenované vlákno se specifikovaným běhuschopným cílem. Thread(Runnable t, String s); Pojmenované vlákno se specifikovaným běhuschopným cílem.

62 Třídní metody třídy Thread 62 Deklarace Thread currentthread(); Popis Vrací odkaz na právě běžící vlákno (current). boolean interrupted(); Testuje, zda běžící vlákno (current) má příznak interrupted. void sleep(long n); Uspí běžící (current) vlákno na n milisekund.

Vlákna. První jednoduchý program s vlákny:

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ě

Více

Vlákna. První jednoduchý program s vlákny:

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í

Více

Otázka 31 - Y36PJV. PDF created with pdffactory trial version Zadání. Procesy a vlákna. Vlákna. Proces. Vlákno.

Otázka 31 - Y36PJV. PDF created with pdffactory trial version  Zadání. Procesy a vlákna. Vlákna. Proces. Vlákno. Otázka 31 - Y36PJV Zadání Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (Y36PJV) Procesy a vlákna Proces Každá aplikace je vlastně běžící proces. Pokud je aplikace spuštěna

Více

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) 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ří

Více

VIII. Seminář Java VIII p.1/36

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

Více

Procesy a vlákna - synchronizace

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

Více

Vícevláknové aplikace

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

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

Úvod do programovacích jazyků (Java)

Ú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

Více

Z. Kotala, P. Toman: Java ( Obsah )

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

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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í

Více

Operační systémy. Přednáška 4: Komunikace mezi procesy

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é

Více

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

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

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

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

Více

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

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

Více

Algoritmizace a programování

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

Více

Programování v jazyku Java vlákna a procesy

Programování v jazyku Java vlákna a procesy Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programování v jazyku Java vlákna a procesy BI-PJV Programování v jazyku Java Katedra teoretické informatiky Miroslav Balík Fakulta informačních

Více

Procházka na provázku

Procházka na provázku Procházka na provázku Program s mnoha metodami připomíná knósský labyrint s mnoha sály, jimiž se protlouká statečný Threadeus, jemuž pro šťastný návrat chytrá Ariadna dala klubíčko. Threadeus pokaždé při

Více

Pavel Procházka. 3. prosince 2014

Pavel Procházka. 3. prosince 2014 Jazyk C# (seminář 11) Pavel Procházka KMI 3. prosince 2014 Motivace Dnes už se prakticky nedělají jednojádrové procesory pokud potřebujeme výkon, musíme zapojit všechna jádra Často potřebujeme dělat více

Více

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

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

Více

Programovací jazyky s podporou vláken Java

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

Více

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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................

Více

Soubor jako posloupnost bytů

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í

Více

Abstraktní datové typy: zásobník

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í

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

JAVA V Vlákna Java, zimní semestr

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

Více

Algoritmizace a programování

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

Více

Procesy a vlákna (Processes and Threads)

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

Více

Java - výjimky. private void vstup() throws IOException {... }

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

Více

Teoretické minimum z PJV

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

Více

KTE / ZPE Informační technologie

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ší

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

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ů

Více

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice Řídicí příkazy V této kapitole se seznámíte s příkazy, které řídí postup provádění programu Příkazy řízení programu se řadí do třech kategorií: příkazy výběru, kam patří příkazy if a switch, příkazy iterace,

Více

Principy operačních systémů. Lekce 6: Synchronizace procesů

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)

Více

JSR 184 - tutorial 2 Transformace v JSR-184

JSR 184 - tutorial 2 Transformace v JSR-184 JSR 184 - tutorial 2 Transformace v JSR-184 Cíl tutorialu: - naučit vás měnit pozici/ rotaci/ velikost objektu Tak jdeme na to: V minulém tutorialu (Úvod do JSR-184) jsme si ukázali, jak námi vytvořenou

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

Management procesu I Mgr. Josef Horálek

Management procesu I Mgr. Josef Horálek Management procesu I Mgr. Josef Horálek Procesy = Starší počítače umožňovaly spouštět pouze jeden program. Tento program plně využíval OS i všechny systémové zdroje. Současné počítače umožňují běh více

Více

RMI Remote Method Invocation

RMI Remote Method Invocation 2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient

Více

Vláknové programování část V

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

Více

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky 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 rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

Úvod do programovacích jazyků (Java)

Ú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

Více

Generické programování

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 =

Více

1. Téma 12 - Textové soubory a výjimky

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

Více

Paralelní programová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 / 17 Monitor Semafor vedle aktivní (čekací smyčka, busy-wait) i pasivní implementace

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

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 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á

Více

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

Paralelní programová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í

Více

typová konverze typová inference

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

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

8 Třídy, objekty, metody, předávání argumentů metod

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

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

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. 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íce

Čipové karty Lekařská informatika

Čipové karty Lekařská informatika Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25 Seminář Java Výjimky Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Výjimky 1/ 25 Výjimky Co a k čemu jsou výjimky výjimka je mechanizmus umožňující psát robustní, spolehlivé

Více

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

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í

Více

Textové soubory. alg9 1

Textové soubory. alg9 1 Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle

Více

Java a XML. 10/26/09 1/7 Java a XML

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

Více

JAVA. Krátke poznámky:

JAVA. Krátke poznámky: JAVA Krátke poznámky: Vše je definováno ve třídách; Žádné funkce mimo třídy Skoro všetko je objekt, výnimka sú premenné (napr. int) Neexistuje operátor delete Rušenie objektov výlučne cez Garbage Collector

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

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

Více

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné O autorovi 15 O odborném korektorovi 15 Úvod 17 Vývoj jazyka Java 17 Java SE 8 19 Struktura této knihy 20 Klíčové znalosti a pojmy 20 Testové otázky 20 Odpovídá expert 20 Cvičení 20 Předchozí zkušenosti

Více

Úvod do programovacích jazyků (Java)

Ú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

Více

Java Výjimky Java, zimní semestr

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í

Více

Iterator & for cyklus

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()

Více

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. 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

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

Zápis programu v jazyce C#

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č

Více

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 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

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

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

Více

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. 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íce

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 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

Více

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ 4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve

Více

8. přednáška: Soubory a proudy

8. přednáška: Soubory a proudy 8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace

Více

7. Datové typy v Javě

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ů

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

IRAE 07/08 Přednáška č. 7. Začátek (head)

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ů

Více

Programování v Javě I. Leden 2008

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

Více

Datové struktury. alg12 1

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

Více

Programování v Javě I. Únor 2009

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

Více

Pokročilé programování na platformě Java. Úvod

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

Více

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í. 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

Více

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;

Více

Principy objektově orientovaného programování

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

Více

9. přednáška - třídy, objekty

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

Více

Jazykové konstrukce pro paralelní výpočty

Jazykové konstrukce pro paralelní výpočty Paralelismus se vyskytuje na: Jazykové konstrukce pro paralelní výpočty 1. Úrovni strojových instrukcí 2. Úrovni příkazů programovacího jazyka 3. Úrovni podprogramů 4. Úrovni programů Vývoj multiprocesorových

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33 Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt

Více

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

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

Více

ÚVOD DO OPERAČNÍCH SYSTÉMŮ

ÚVOD DO OPERAČNÍCH SYSTÉMŮ ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna Plánování procesů (Process Scheduling) Č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

Více

Vytváření a použití knihoven tříd

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd 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 Prostory jmen motivace spolupráce

Více

Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v

Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v Vývoj informačních systémů Námět na praktické cvičení Klient Server (nepovinné) Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový

Více

Distribuované systémy a výpočty

Distribuované systémy a výpočty Distribuované systémy a výpočty X36DSV Jan Janeček Peter Macejko CORBA Common Object Request Broker Architecture - konsorcium OMG (Object Management Group) - standard pro podporu komunikace v DS - pouze

Více

JAVA V jar Java, zimní semestr

JAVA V jar Java, zimní semestr JAVA jar 1 Přehled vytváření souborů sdružujících.class soubory JAR ~ Java Archive soubor přípona.jar formát ZIP soubor META-INF/MANIFEST.MF popis obsahu použití distribuce softwaru do CLASSPATH lze psát.jar

Více

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

public class Karel { private int position; public boolean issmiling; public int getposition() { return position; Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací

Více

14.4.1. Typický prvek kolekce pro české řazení

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í

Více