Wielowątkowość w języku Java
Czas trwania szkolenia:5 dni (40h)
Kod kursu:J/MT
Poziom zaawansowania:
O szkoleniu Wielowątkowość w języku Java
W cenie otrzymasz:
- Materiały szkoleniowe
- Certyfikat ukończenia szkolenia
- W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
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ń
- Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
- Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
- Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how
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
Podstawy wielowątkowości
- 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
Procesy
- Proces a wątek
- Komunikacja między wątkami
- Komunikacja między procesami
- Przegląd rozwiązań JEE
- Niskopoziomowe API procesów w Javie
Wątki
- Podstawy API wątków (Thread, Runnable)
- Startowanie i kończenie wątków
- Parametry wątków
- Wyjątki i handlery
- Podstawy współpracy między wątkami
- Zagrożenia w aplikacjach wielowątkowych
- Narzędzia monitorowania pracy wątków (JConsole, VisualVM, JMC)
Wykonywanie zadań
- 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
GUI a wielowątkowość w Javie
- Problemy wielowątkowości w GUI
- Rozwiązania AWT
- Rozwiązania Swing
- Kończenie pracy
Operacje atomowe
- Czym jest atomowość?
- Problemy braku atomowości
- Unikanie problemów (stałe, dane lokalne)
- Gdzie Java gwarantuje atomowość
- Bariery pamięci
- Klasy atomowe i leniwy zapis
- Operacje CAS w API (java.util.concurrent.atomic i java.lang.invoke)
- Pętle CAS jako alternatywa synchronizacji (spinlock)
Zaawansowana współpraca wątków
- 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
Kolekcje a wielowątkowość
- 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
Garbage Collector a wielowątkowość
- 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
Asynchroniczne IO
- Asynchroniczna praca z plikami
- Asynchroniczna praca z TCP/IP
- CompletableFuture w java.net.http (wprowadzenie)
Wzorce wielowątkowości a gotowe rozwiązania
- Wzorce blokowania
- Wzorce współpracy
- Wzorce zarządzania wątkami
- Wzorce obsługi zdarzeń
- Wzorce wywołań asynchronicznych
- Wzorce inicjalizacji
Wydajność aplikacji wielowątkowych
- 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