Szkolenie: Wielowątkowe i asynchroniczne aplikacje w Javie
Podczas szkolenia uczestnicy poznają metody tworzenia wielowątkowych i asynchronicznych aplikacji z uwzględnieniem nowoczesnych technik i narzędzi dostępnych w najnowszych wersjach języka Java.
- Trenerzy praktycy
- Kameralne grupy
Czas trwania szkolenia:2 dni (16h)
Kod kursu:J/PARA
Wielowątkowe i asynchroniczne aplikacje w Javie
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
Dla kogo?
Osób chcących poznać możliwości programowania wielowątkowego i asynchronicznego 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
Wymagania
Podstawowa umiejętność programowania 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
Program szkolenia
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