Wielowątkowość w języku Java

LICZBA DNI: 5 (40h)

KOD KURSU: J/MT

Powiadom
o kolejnych terminach

# java

# multithreading

Autor szkolenia:
Michał Podbielski

O szkoleniu

DLA KOGO?

Programiści Java chcący wytwarzać aplikacje wielowątkowe.

WYMAGANIA

Umiejętność programowania w języku Java

ZALETY

Szkolenie uwzględnia zarówno sposoby radzenia sobie z wielowątkowością przy użyciu gotowych klas z API java.util.concurrent, jak i dogłębnie omawia mechanizmy, problemy i niskopoziomowe rozwiązania dla wielowątkowości, których znajomość niezbędna jest do tworzenia własnych zaawansowanych rozwiązań

Cele szkolenia

Dogłębne poznanie API Java dla wielowątkowości, umiejętny dobór rozwiązań w celu optymalizacji wydajności oraz użycie narzędzi do monitoringu i wykrywania problemów wielowątkowości

Nabycie umiejętności tworzenia aplikacji wielowątkowych począwszy od podstaw współpracy między wątkami, przez zaawansowane algorytmy busy-waiting z użyciem operacji typu CAS, na dokładnym przećwiczeniu API java.util.concurrent skończywszy

Poznanie wzorców wielowątkowości z perspektywy ich pokrycia oraz braków w java.util.concurrent z omówieniem alternatywnych strategii. Tak, aby uczestnicy mieli świadomość, kiedy sięgać po gotowe rozwiązania, a kiedy należy tworzyć własne

Omówienie wpływu systemów operacyjnych, optymalizacji Java (JIT, Hotspot) czy samych procesorów

Omówienie i przećwiczenie związanych z tym problemów wielowątkowości oraz sposobów ich rozwiązywania

Program

  • Czym jest wielowątkowość
  • Przetwarzanie liniowe
  • Przetwarzanie wielowątkowe (parallel, concurrent)
  • Wywłaszczanie wątków
  • Szeregowanie wątków
  • Współpraca między wątkami
  • Proces a wątek
  • Komunikacja między wątkami
  • Komunikacja między procesami
  • Przegląd rozwiązań JEE
  • Niskopoziomowe API procesów w Javie
  • Podstawy wątków (Thread, Runnable)
  • Startowanie i kończenie wątków
  • Parametry wątków (nazwa, priorytet, demon, grupa)
  • Wyjątki i handlery
  • Podstawy współpracy między wątkami: cykl życia, yield, sleep, join, sekcja krytyczna, wait-notify, interrupt
  • Zagrożenia w aplikacjach wielowątkowych: ograniczenia cyklu życia, deprecated w Thread, Livelock, brak atomowości
  • Zagrożenia blokowania wątków (złe monitory, hazard, starvation, deadlock)
  • Narzędzia monitorowania pracy wątków (jConsole, VisualVM, JMC)
  • Wzmianka o starym API (Timer, TimerTask)
  • Co poza Runnable (Delayed, Callable, różne wersje Future)
  • Przegląd kolejek blokujących zadania
  • Wykonywanie zadań
  • Pule wątków
  • Przegląd kolejek blokujących zadania
  • Scheduling
  • Konsumpcja wyników
  • Fork-Join API
  • Flow - programowanie reaktywne
  • "Promises" w Javie czyli CompletableFuture
  • Problemy wielowątkowości w GUI
  • Rozwiązania AWT
  • Rozwiązania Swing
  • Kończenie pracy
  • Czym jest atomowość?
  • Problemy braku atomowości
  • Unikanie problemów (stałe, dane lokalne)
  • Gdzie Java gwarantuje atomowość
  • Bariery pamięci: stałe, synchronizacja, voltaile, lazySet, CAS
  • Klasy atomowe i leniwy zapis
  • Operacje CAS w API (java.util.concurrent.atomic i java.lang.invoke)
  • Pętle CAS jako alternatywa synchronizacji (spinlock)
  • Monitor a Lock (java.util.concurrent.locks)
  • Gotowe realizacje Lock
  • Lock a współpraca wątków (Condition)
  • Tworzenie klas blokujących
  • Zaawansowane spinlock’i
  • Inne klasy blokujące:
  • Semaphore, CountDownLatch, CyclicBarrier, Phaser, Exchanger, SynchronousQueue
  • Przegląd kolekcji blokujących
  • Stare kolekcje (Hashtable, Vector, Stack)
  • Collections API a wielowątkowość
  • Cechy kolekcji wielowątkowych java.util.concurrent
  • Kolekcje blokujące
  • Kolekcje kopiujące przy zapisie
  • Kolekcje współbieżne
  • Porównanie wydajności java.util.concurrent z Collections API
  • Pauza czyli Stop The World
  • Słaba teoria generacji i model pamięci
  • Parametry wydajnościowe GC
  • Rodzaje GC a wielowątkowość
  • Dobór GC
  • Asynchroniczna praca z plikami
  • Asynchroniczna praca z TCP/IP
  • CompletableFuture w java.net.http (wprowadzenie)
  • Wzorce blokowania
  • Wzorce współpracy
  • Wzorce zarządzania wątkami
  • Wzorce obsługi zdarzeń
  • Wzorce wywołań asynchronicznych
  • Wzorce inicjalizacji
  • Współpraca a odpytywanie
  • Sposoby ograniczania blokowania
  • Granica opłacalności dla Fork-Join
  • Ograniczenia zrównoleglenia - prawo Amdahla
  • Kontrola ilości wątków
  • Tuning Javy dla wątków

Nasi eksperci

POLITYKA COOKIES:

Korzystamy z plików cookies, by móc jak najlepiej dostosować stronę do Twoich potrzeb oraz wyświetlać Ci przydatne i adekwatnych dla Ciebie reklamy w serwisie i poza nim. Możesz kontrolować ustawienia ciasteczek w swoich ustawieniach swojej przeglądarki. Odwiedzając tę stronę, wyrażasz zgodę na wykorzystywanie przez nas plików cookies.