Vybraná témata: vlákno a proces ⚫ thread a runnable ⚫ executor ⚫ callable a future ⚫ kooperace vláken ⚫ paměťový model Javy ⚫ interference vláken ⚫ chyby konzistence paměti ⚫ synchronizace a další prostředky ochrany ⚫ psaní vláknově bezpečného kódu ⚫ ladění a testování vícevláknových aplikací

Kód kurzu: JAV · Délka: 1 (dní) · Jazyky: česky nebo anglicky · Základní cena: 9990 Kč/os.

Logo kurzu Java vícevláknové programování

Již od dvou osob! Více osob - větší sleva! Pro jiné množství nás kontaktujte.
Vyberte si dny, které vám vyhovují. V naprosté většině případů vám vyjdeme vstříc. Nemusí jít po sobě, ale je to určitě lépe. Rozdělené školení se cenově neliší od po sobě jdoucího.
Cena za jednoho účastníka.
Konečná celková cena (neplátci DPH). Cesta a ubytování lektora v rámci ČR je zdarma!

Co se na školení "Java vícevláknové programování" naučím?

  1. Úvod
    1. Procesy vs. vlákna (threads)
    2. Více CPU/jader
    3. Proč je vícevláknové programování obtížné?
    4. Proč programovat vícevláknově?
    5. Vlákno main()
    6. Doporučená literatura
  2. Základy vláken
    1. Definice vlákna
    2. Rozhraní Runnable
      1. Metoda run()
    3. Třída Thread
      1. Jemný úvod
      2. Definice vlákna
        1. Poskytnutím Runnable
        2. Poděděním Thread
        3. Jaký způsob zvolit?
      3. Pojmenování vlákna
      4. Metoda start()
      5. Metoda Thread.sleep()
      6. Přerušení (interruptions)
      7. Metoda yield()
      8. Další užitečné metody
        1. currentThread()
        2. isAlive()
      9. Metody stop(), suspend() a resume()
    4. Rozhraní Executor
      1. Executor
      2. ExecutorService
      3. SchedulerExecutorService
      4. execute() a submit()
    5. Fondy (pool) vláken
      1. newFixedThreadPool()
      2. newCachedThreadPool()
      3. newSingleThreadExecutor()
      4. scheduled thread Executor
    6. Callable<V> a Future<V>
    7. Skupiny vláken (thread groups)
    8. Zachytávání výjimek
  3. Kooperace a komunikace vláken
    1. Pozastavení - Thread.sleep()
    2. Přerušení - Thread.interrupt()
      1. Metoda interrupt()
      2. Umožnění přerušení
        1. Zachycení InterruptedException
        2. Thread.interrupted()
      3. Příznak přerušení (interrupt flag)
      4. InterruptedException
    3. Čekání na ukončení - Thread.join()
      1. Varianta s timeoutem
    4. Thread.yield()
    5. Čekání na upozornění - Object.wait()
      1. Varianta s timeoutem
      2. Uvolnění zámku
      3. Guarded block idiom
      4. Výjimka InterruptedException
      5. Výjimka IllegalMonitorStateException
    6. Upozornění čekajícím vláknům - Object.notify() a notifyAll()
      1. Probuzení jednoho nebo všech vláken
      2. Výjimka IllegalMonitorStateException
      3. Spurious wakeup
  4. Sdílení prostředků
    1. Stack (zásobník) - nesdílen vlánky
      1. LIFO pamět
      2. Každá metoda má svůj stack
      3. Lokální proměnné a formální parametry
      4. Parametr exception handleru
    2. Heap (hromoda) - sdílen vlákny
      1. Random-access pamět
      2. Instační proměnné
      3. Statické proměnné
      4. Prvky polí
      5. Objekty
  5. Rizika sdílení prostředků
    1. Interference vláken
      1. Interleave (prokládání)
      2. Race condition (souběh)
      3. Liveness hazard (aktivita)
        1. Deadlock (uváznutí)
        2. Starvation (vyhladovění)
        3. Livelock (vzájemné brždění)
    2. Chyby konzistence paměti
      1. Vztah happens-before ("nastává-před")
      2. Atomicity (nedělitelný přístup)
      3. Visibility (viditelnost)
  6. Ochrana před riziky sdílení
    1. Synchronizace
      1. Co dělá synchronizace
      2. Co a kdy synchronizovat
      3. Synchronized metody
      4. Synchronized příkazy
      5. Nevýhody a rizika synchronizace
    2. Zámky (locks)
      1. Implicitní zámek (intristic lock)
      2. Explicitní zámek - rozhraní Lock
        1. Metody lock() a unlock()
        2. Neblokující pokus o zamčení
        3. Přerušitelný pokus o zamčení
        4. Pokus o zamčení s timeoutem
        5. Úklid při výjimce
        6. Wait/notify mechanismus
        7. Implementace ReentrantLock
      3. Atomicita
        1. Vždy atomické operace
        2. Nutnost synchronizace
        3. Klíčové slovo volatile
        4. Třídy Atomic*
  7. Psaní, ladění a testování vícevláknového kódu
    1. Vláknově bezpečný kód
      1. Neměnné (immutable) objekty
      2. Vláknově nebezpečné třídy z JDK
      3. Thread-safe anotace z JCIP
    2. Ladění vícevláknového kódu
      1. Thread dump
        1. Z příkazové řádky
        2. GUI nástroj VisualVM
      2. JDK nástroje
        1. jps
        2. jstack
        3. jmap
    3. Testování vícevláknového kódu
      1. Tempus-fugit
      2. Data-race-test
      3. JCarder
      4. Keshmesh

Doporučené vstupní znalosti

  • znalosti Java SE
  • práce s příkaz. řádkou
  • práce se soubory

Doporučené předcházející kurzy

Doporučené navazující kurzy

  • žádné

Lektor kurzu

Lektor kurzu Libor Jelínek Libor Jelínek

Je nadšený programátor a šťastný uživatel Linuxu. Má přes 10 let zkušeností s Javou, ale nyní nejraději pracuje v Pythonu. Je autorem řady příruček školení, učebnic a článků. Volno tráví kutěním nebo vařením.

Mám zájem!
Nevyhovuje vám rozsah nebo témata školení?

To správné školení ve správný čas pro vás umíme připravit na míru!