Wielowątkowe i asynchroniczne aplikacje w Javie
Czas trwania szkolenia:2 dni (16h)
Kod kursu:J/PARA
Poziom zaawansowania:
O szkoleniu Wielowątkowe i asynchroniczne aplikacje w Javie
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?
- Osób chcących poznać możliwości programowania wielowątkowego i asynchronicznego w języku Java
Wymagania
- Podstawowa umiejętność programowania w języku Java
Zalety
- Przekrojowe omawianie zagadnień oraz przykłady oparte o życiowe problemy
- Promowanie obowiązujących konwencji i dobrych praktyk programistycznych
- Minimalna teoria oparta na praktycznych przykładach i warsztatach
- Praktyczna wiedza uwzględniająca zmiany wprowadzone w najnowszych wydaniach Javy
Cele szkolenia
- Nabycie umiejętności programowania wielowątkowego oraz asynchronicznego w Javie z uwzględnieniem nowości wprowadzanych do języka Java przez ostatnie lata
- Poznanie niuansów języka Java w zakresie dostępnych elementów wspomagających programowanie wielowątkowe i asynchroniczne
- Omówienie i praktyczne przetestowanie wpływu zastosowanych rozwiązań na wydajność napisanego kodu
- Poznanie możliwości debugowania i testowania wielowątkowej aplikacji
Program
Terminologia na przykładzie JVM
- Programowanie współbieżne, wielowątkowe, asynchroniczne
- Niebezpieczeństwa związane z wielowątkowymi procesami - wyścigi, deadlock, zagłodzenie, livelock
- Sekcja krytyczna
- Cechy wątków w Javie
- Słowo kluczowe volatile oraz synchronized
- Zasady działania wielowątkowości w ramach JVM - Java Memory Model
- Poprawne tworzenie typów Thread-Safe
Tworzenie i koordynacja pracy wątków
- Standardowe i nowe API tworzenia wątków w Javie
- Interfejsy funkcyjne zadań realizowanych na wątkach - Runnable / Callable
- Typ CompletableFuture
- LockSupport park / unpark vs standardowy Thread.wait
- Asynchroniczna obsługa zapytań typu REST na przykładzie wbudowanego w JDK HttpClient
Egzekutory
- Porównanie dostępnych typów egzekutorów
- Harmonogramowanie zadań asynchronicznych z wykorzystaniem egzekutorów
Synchronizacja wątków z użyciem blokad jawnych i niejawnych
- proste blokady obiektowe - ReentrantLock, ReadWriteLock, StampedLock
- Semafor a licznik CountDownLatch
- CyclicBarrier i Phaser
Kolekcje i strumienie wielowątkowe
- Podstawowe kolekcje blokujące: ConcurrentHashMap, ConcurrentLinkedDeque/Queue
- Kolekcje skalowalne i automatycznie sortujące zawartość: ConcurrentSkipListMap, ConcurrentSkipListSet
- Kolekcje kopiujące zawartość: CopyOnWriteArrayList, CopyOnWriteArraySet
- Typy kolejek: porównanie interfejs TransferQueue, BlockingQueue wraz z dostępnymi implementacjami
- Wrappery na istniejące kolekcje: java.util.Collections.synchronized...
- Strumienie wielowątkowe
- Zagrożenia płynące z naiwnego używania strumieni wielowątkowych
Wykorzystanie istotnych elementów java.util.concurrent
- Zastosowanie typów atomowych
- Framework Fork/Join
- Typy reaktywne: Flow / Publisher / Subscriber
Wirtualne wątki
- Porównanie wątków fizycznych i wirtualnych
- Potencjalne problemy w używaniu wirtualnych wątków
- Typ ThreadLocal a ScopedValue
- Structured Concurrency - nowe spojrzenie na programowanie asynchroniczne w Javie
- Popularne frameworki a wirtualne wątki
Debugowanie / testowanie rozwiązań wielowątkowych
- Problemy w testowaniu aplikacji wielowątkowych
- Debugowanie z wykorzystaniem VisualVM / jstack
- Techniki pisania testów jednostkowych dla kodu wielowątkowego
- Oficjalne narzędzie od JDK: jcstress