Warsztat Java #18 - Concurrency
What you'll learn
- Zrozumienie koncepcji współbieżności i różnic między wątkami a procesami.
- Poznanie zalet i wad współbieżności oraz różnic między współbieżnością a równoległym wykonaniem.
- Umiejętność tworzenia i zarządzania wątkami w Javie.
- Zrozumienie problemów związanych z wielowątkowością, takich jak race condition, deadlock, livelock i starvation.
- Zapewnienie bezpieczeństwa wątków przy użyciu synchronized, lock, ThreadLocal i volatile.
- Zrozumienie zasady HAPPENS BEFORE i jej znaczenia w zapewnieniu poprawnego działania wątków.
- Zarządzanie pulami wątków i wykorzystywanie ExecutorService do efektywnego zarządzania zadaniami.
- Tworzenie i przetwarzanie strumieni równoległych w Javie.
- Umiejętność poprawnego kończenia strumieni równoległych.
- Zastosowanie klas atomowych do zapewnienia bezpiecznego dostępu do zasobów współdzielonych.
Requirements
- Podstawową znajomość języka Java.
Description
Czy wiesz, że Java potrafi wykonywać kilka czynności jednocześnie? W tym kursie dowiesz się, jak sprawić, by Java działała w trybie współbieżnym, oraz poznasz związane z tym problemy i wyzwania. Kurs jest mocno teoretyczny i wszystkie materiały zostały opracowane w formie tekstowej.
Tematyka Warsztatu
Concurrency: Wprowadzenie
O co w tym chodzi? Wprowadzenie do współbieżności i jej znaczenie.
Czym jest wątek i czym jest proces? Różnice między wątkami a procesami.
Zalety współbieżności: Korzyści płynące z użycia współbieżności.
Wady współbieżności: Problemy i ograniczenia związane z współbieżnością.
Concurrency vs Parallel Execution: Różnice między współbieżnością a równoległym wykonaniem.
Tworzenie i Zarządzanie Wątkami
Tworzymy własne wątki: Metody tworzenia wątków w Javie.
Problemy wielowątkowości: Najczęstsze problemy i jak sobie z nimi radzić.
Java a zarządzanie pamięcią: Jak Java zarządza pamięcią w kontekście wielowątkowości.
Race condition: Jak uniknąć konfliktów (synchronized, lock, ThreadLocal).
Deadlock: Jak rozpoznać i unikać zakleszczeń.
Livelock: Jak rozpoznać i unikać żywiołowych zakleszczeń.
Starvation: Jak zapobiegać głodzeniu wątków.
Słówko volatile: Znaczenie i zastosowanie słowa kluczowego volatile.
Gwarancja HAPPENS BEFORE: Zasady gwarancji porządku zdarzeń w Javie.
Thread Safety i Narzędzia
Thread safety w gotowych narzędziach: Jak zapewnić bezpieczeństwo wątków w narzędziach.
Thread safety w Java API: Bezpieczeństwo wątków w standardowych klasach Java.
Thread safety w Hibernate: Jak zapewnić bezpieczeństwo wątków w Hibernate.
Thread Pools i ExecutorService
Thread pools: Zarządzanie pulami wątków.
ExecutorService: Wykorzystanie ExecutorService do zarządzania wątkami.
Interfejs Runnable: Tworzenie i uruchamianie zadań przy użyciu Runnable.
Interfejs Callable: Tworzenie i uruchamianie zadań przy użyciu Callable.
Parallel Streams
Tworzenie parallel streams: Jak tworzyć strumienie równoległe.
Procesowanie parallel streams: Przetwarzanie danych za pomocą strumieni równoległych.
Kończenie parallel streams: Jak poprawnie zakończyć przetwarzanie strumieni równoległych.
Klasy Atomic
Co to i po co to? Zastosowanie i korzyści z użycia klas atomowych.
Warsztat ten jest 18. warsztatem w ramach ścieżki Zajavka. Oczywiście możesz go realizować niezależnie od innych moich materiałów.
Who this course is for:
- Programistów Java: Junior i Mid-Level Developerów
- Dla osób pracujących nad aplikacjami wymagającymi wydajności i równoległego przetwarzania danych.
- Dla studentów kierunków informatycznych, którzy chcą zrozumieć zasady współbieżności i wielowątkowości.
- Osób przygotowujących się do pracy w branży IT, pragnących zwiększyć swoje kompetencje w zakresie programowania współbieżnego.
Instructors
Zajavka to kompletny, profesjonalny i pasjonujący roczny kurs programowania. Zajavkę stworzyliśmy z myślą o tych, którzy pragną rozpocząć swoją intensywną przygodę z programowaniem i w ciągu 12 miesięcy osiągnąć poziom profesjonalnego programisty Javy. Zacznij naukę od bootcampu od podstaw i kontynuuj ją w warsztatach, które krok po kroku, intensywnie i w ciągu kilku miesięcy przygotują Cię do pełnienia roli profesjonalnego programisty Javy.
Jestem programistą Java z ponad 9 letnim doświadczeniem komercyjnym. Zajmuję się głównie technologiami Java i JVM oraz tworzeniem stron aplikacji webowych wykorzystujących technologie Java, Spring, Kafka. Mam również doświadczenie w tworzeniu aplikacji opartych o React. Stawiam przede wszystkim na ciągły rozwój osobisty, zdobywanie nowych umiejętności i podnoszenie jakości swojej pracy. W swojej karierze zawodowej spędziłem dużo czasu ucząc innych, prowadząc szkolenia i nagrywając materiały wideo w celach edukacyjnych.