Wielowątkowość w Javie
Wielowątkowość w Javie
Kod szkolenia: JAVA-WAT
Szkolenie adresowane jest do programistów Java, aplikacji wielowątkowych.
Celem szkolenia jest dokładne poznanie API Java w zakresie wielowątkowości i nabycie umiejętności posługiwania się nim. Od podstaw współpracy między wątkami, poprzez zaawansowane operacje typu CAS, na dokładnym przećwiczeniu biblioteki java.util.concurent skończywszy. Także z uwzględnieniem wpływu systemów operacyjnych, czy optymalizacji Java, a nawet samych procesorów - związanych z tym problemów programowania wielowątkowego i sposobów ich rozwiązywania.
5 dni, po 8 godzin. Łącznie 40 godzin(y) szkolenia.
Oczekiwane przygotowanie słuchaczy przed szkoleniem
Od uczestników wymaga się umiejętności programowania w języku Java.
Polecane szkolenia uzupełniające
Szkolenie poprzedzające - Programowanie w Java (JAVA-PRO).
Inne szkolenia zaawansowane:
wydajność (JAVA-WAT), projektowanie (JAVA-WZO), architektura (JAVA-ARCH)
- Wprowadzenie do wielowątkowości
- Czym jest wielowątkowość
- Szeregowanie wątków
- Współpraca między wątkami
- Procesy w Javie
- Procesy a wątki
- Niskopoziomowe API procesów w Javie
- Przegląd rozwiązań wyższego poziomu w Java (logika zdalna)
- Wątki w Javie
- Tworzenie wątków w Javie
- Parametry wątków
- Wyjątki w wątkach
- Wątki wirtualne
- Podstawowa współpraca między wątkami
- Zagrożenia w aplikacjach wielowątkowych
- Narzędzia monitorowania pracy wątków
- Zadania schedulowane i pule wątków
- Stare API schedulingu
- Różne typy zadań - czyli nie tylko Runnable
- Wykonawca zadań
- Pule wątków
- Kolejki zadań - przegląd kolejek blokujących
- Scheduling w pulach wątków
- Pule wątków a konsumpcja wyników
- Fork-Join API
- Flow - programowanie reaktywne
- "Promises" w Javie
- GUI a wielowątkowość w Javie
- Problemy wielowątkowości w GUI
- Rozwiązania AWT - EventQueue
- Rozwiązania SWING
- Kończenie pracy
- Operacje atomowe w Javie
- Czym jest atomowość?
- Problemy braku atomowości
- Unikanie problemu
- Gwarantowana atomowość w Javie
- Bariery pamięci - opis i rodzaje
- Wymuszanie barier pamięci
- CAS w API Javy (java.util.concurrent.atomic i java.lang.invoke)
- Spinlock - pętle CAS jako alternatywa synchronizacji
- Zaawansowana współpraca między wątkami
- Monitor a Lock (java.util.concurrent.locks)
- Gotowe realizacje Lock
- Współpraca między wątkami na Lock
- Condition jako alternatywa wait-notify
- Tworzenie własnych klas blokad
- Inne implementacje blokad (java.util.concurrent)
- Kolekcje a wielowątkowość w Javie
- "Stare" kolekcje Java a wielowątkowość
- Collections API a wielowątkowość
- Kolekcje wielowątkowe java.util.concurrent
- Kolekcje blokujące
- Kolekcje kopiujące przy zapisie
- Kolekcje współbieżne
- Podsumowanie ze względu na interfejsy kolekcji
- Porównanie wydajności java.util.concurrent z Collecions API
- Grabage Collector a wielowątkowość
- Stop The World
- Model Pamięci
- Różne rodzaje Garbage Collector a wielowątkowość
- Różne rodzaje Garbage Collector a obszary pamięci
- Wybór Garbage Collector
- Wskazówki doboru Garbage Collector (GC)
- Asynchroniczne IO
- Asynchroniczna praca na plikach
- Asynchroniczna praca na gniazdkach
- CompletableFuture w java.net.http (wprowadzenie)
- Wzorce wielowątkowości a rozwiązania w Javie
- Wzorce blokowania
- Wzorce współpracy
- Wzorce zarządzania wątkami
- Wzorce obsługi zdarzeń
- Wzorce wywołań asynchronicznych
- Wzorce inicjalizacji
- Wydajność aplikacji wielowątkowych w Javie
- Współpraca zamiast odpytywania
- Ograniczanie blokowania
- Fork-Join granica opłacalności
- Prawo Amdahla - czyli ograniczenia zrównoleglenia
- Kontrola ilości wątków - pule wątków
- Tuning Javy dla wątków