Multithreading vícevláknovost
|
|
- Bohumila Fišerová
- před 6 lety
- Počet zobrazení:
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 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íceVlá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íceOtá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íce30. 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íceVIII. 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íceProcesy 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íceVí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íceMichal 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) 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íceZ. 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íce14.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íceOperač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íceVlá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íceDefinice 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ícePří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íceAlgoritmizace 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íceProgramová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íceProchá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ícePavel 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íceZOS 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íceProgramovací 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ícePř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íceSoubor 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íceAbstraktní 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íceMichal 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íceJAVA 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íceAlgoritmizace 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íceProcesy 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íceJava - 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íceTeoretické 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íceKTE / 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íce2) 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íceSeznamy 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 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ícePrincipy 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íceJSR 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íceMichal 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íceManagement 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íceRMI 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íceVlá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íceTento 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) 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íceGenerické 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íce1. 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íceParalelní 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íce1. 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íce7. 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íceStatické 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íceParalelní 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ícetypová 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íceMichal 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íce8 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íceVýč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ícePokud 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 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 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íceSemin 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íceClass 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íceTextové 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íceJava 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íceJAVA. 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ícePŘ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íceO 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) 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íceJava 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íceIterator & 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ícePokud 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íceMichal 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íceZá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íceSprá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íceDefinice 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ícePokud 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íceNIO. 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íce4. 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íce8. 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íce7. 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íceMichal 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ícePočí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íceSeminář 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íceIRAE 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íceProgramová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íceDatové 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íceProgramová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ícePokroč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íceFronta (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íce11.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íceTŘÍ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ícePrincipy 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íce9. 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íceJazykové 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 Ří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íceIRAE 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íceCvič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Ů 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íceVytvář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íceZadá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íceDistribuované 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íceJAVA 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ícepublic 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íce14.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