Wielowątkowość w języku Java
LICZBA DNI: 5 (40h)
KOD KURSU: J/MT
Weź udział w szkoleniu
Termin
Lokalizacja
Trener
Cena / os
29
marca
Warszawa,
Termin
29
marca
Lokalizacja
Warszawa,
Trener
Cena / os
Powiadom
o kolejnych terminach
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
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 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)
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: 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)
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
- Semaphore, CountDownLatch, CyclicBarrier, Phaser, Exchanger, SynchronousQueue
- Przegląd kolekcji blokujących
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
