CodeGym
Promocja
Nauka
Kursy
Zadania
Ankiety & quizy
Gry
Pomoc
Harmonogram
Społeczność
Użytkownicy
Forum
Czat
Artykuły
Historie sukcesu
Aktywność
Opinie
Subskrypcje
Jasny motyw

Lekcje

  • Opinie
  • O nas
Start
Rozpocznij naukę
Rozpocznij naukę teraz
  • Mój postęp
  • Kursy
  • Mapa Questów
  • Lekcje
  • Deadlock: przyczyny, przykłady, eliminacja

    JAVA 25 SELF
    Poziom 53,Lekcja 0
    W tym wykładzie wyjaśniamy, czym jest wzajemna blokada wątków (deadlock) w Javie, dlaczego do niej dochodzi i jakie cztery warunki muszą być spełnione. Na praktycznym przykładzie z synchronized pokazujemy odtworzenie problemu, a następnie omawiamy strategie zapobiegania: jednolity porządek przejmowania zasobów, użycie ReentrantLock.tryLock z limitem czasu, skracanie sekcji krytycznych i rezygnację ze zbędnych zagnieżdżonych blokad. Pokażemy diagnostykę przez Thread Dump i jstack, jak rozpoznać stany BLOCKED/ WAITING, a na końcu — checklistę i typowe błędy.
    Dostępne
  • Livelock i Starvation: definicje, przykłady

    JAVA 25 SELF
    Poziom 53,Lekcja 1
    Rozbieramy na czynniki pierwsze anomalie współbieżności Livelock i Starvation: czym różnią się od Deadlock, jak wyglądają w kodzie i w logach. Pokazano przykłady w Javie: „uprzejmi pracownicy” (ożywiona blokada) oraz głodzenie z powodu priorytetów i niesprawiedliwych blokad. Uczymy się wykrywać problem (logowanie, Thread dump, VisualVM, Java Mission Control) i zapobiegać mu: losowe opóźnienia przed ponowną próbą ( Thread.sleep), algorytmy nieblokujące, sprawiedliwe blokady przez ReentrantLock z flagą fairness ( new ReentrantLock(true)), staranne sekcje krytyczne i rezygnację z nadużywania setPriority() i synchronized.
    Dostępne
  • Kolekcje thread-safe: ConcurrentHashMap i inne

    JAVA 25 SELF
    Poziom 53,Lekcja 2
    W tej lekcji omówimy, dlaczego zwykłe kolekcje ( ArrayList, HashMap) są niebezpieczne w środowisku wielowątkowym i jakie alternatywy bezpieczne względem wątków oferuje pakiet java.util.concurrent: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue, struktury oparte na skip list oraz BlockingQueue. Omówimy operacje atomowe, takie jak merge, putIfAbsent, computeIfAbsent, porównamy z Collections.synchronizedMap, rozważymy praktyczne przykłady i typowe błędy (słabo spójne iteratory, nieatomowe sekwencje operacji itp.).
    Dostępne
  • AtomicInteger, AtomicReference: operacje atomowe

    JAVA 25 SELF
    Poziom 53,Lekcja 3
    Dlaczego inkrementacja i ++ nie działa w środowisku wielowątkowym, czym są operacje atomowe i jak zapewnia je pakiet java.util.concurrent.atomic. Omawiamy AtomicInteger i AtomicReference, metody incrementAndGet(), compareAndSet(...), wewnętrzny mechanizm CAS (Compare-And-Swap), a także kiedy lepiej wybrać synchronized, a kiedy — LongAdder. Na końcu — typowe błędy: złożone operacje, ABA i bezpieczeństwo wątkowe obiektów zagnieżdżonych.
    Dostępne
  • Diagnostyka i debugowanie programów wielowątkowych

    JAVA 25 SELF
    Poziom 53,Lekcja 4
    Jak wykonywać i czytać Thread Dump za pomocą jstack, VisualVM i IDE, rozpoznawać stany wątków ( RUNNABLE, BLOCKED, WAITING) i znajdować zakleszczenia. Omówimy monitorowanie wątków w Java Mission Control i Java Flight Recorder, praktyki logowania (nazwy wątków, wejście/wyjście z synchronized), minimalizację blokad, testowanie współbieżności z CountDownLatch oraz analizę rzeczywistego przypadku deadlocku. Na koniec – typowe błędy i jak ich uniknąć.
    Dostępne
  • Wprowadzenie do równoległości

    JAVA 25 SELF
    Poziom 54,Lekcja 0
    W tej lekcji omawiamy różnicę między wielowątkowością a równoległością: gdzie liczy się responsywność, a gdzie — realne przyspieszenie na wielu rdzeniach. Omówimy tworzenie wątków przez Thread, implementację Runnable oraz wysokopoziomowe pule ExecutorService, zobaczymy prosty przykład sumowania tablicy, przeanalizujemy, kiedy równoległość pomaga, a kiedy przeszkadza, a także typowe problemy: wyścigi danych, synchronizację przez synchronized, wzajemne blokady i równoważenie obciążenia. Na końcu — tabela porównawcza i wizualizacja scenariuszy.
    Dostępne
  • ExecutorService, Callable, Future: uruchamianie zadań

    JAVA 25 SELF
    Poziom 54,Lekcja 1
    Praktyka wielowątkowości na poważnie: przekazujemy zadania do ExecutorService zamiast ręcznego tworzenia Thread, zarządzamy pulą, kolejką i cyklem życia ( shutdown(), shutdownNow()). Omawiamy różnicę między Runnable i Callable<T>, odbieramy wyniki przez Future i jego metody ( get(), isDone(), cancel(...), isCancelled()). Pokażemy uruchamianie wielu zadań, invokeAll/ invokeAny, obsługę ExecutionException i typowe błędy.
    Dostępne
  • Strumienie równoległe: składnia i zastosowanie

    JAVA 25 SELF
    Poziom 54,Lekcja 2
    Wyjaśniamy, jak jednym wierszem przełączyć zwykły strumień danych na przetwarzanie równoległe — przez parallelStream() lub .parallel(), co dzieje się pod maską w ForkJoinPool.commonPool(), kiedy równoległość rzeczywiście przyspiesza obliczenia (duże kolekcje, „ciężkie” operacje) i gdzie może spowolnić. Pokażemy przykłady filtrowania, agregacji, sortowania, pomiaru wydajności oraz omówimy typowe błędy: efekty uboczne w forEach, zachowanie porządku, dobór kolekcji i ustawianie stopnia równoległości.
    Dostępne
  • ForkJoinPool i RecursiveTask: zadania rekurencyjne

    JAVA 25 SELF
    Poziom 54,Lekcja 3
    Praktyczny przewodnik po obliczeniach równoległych w Javie: jak działa pula zadań ForkJoinPool i zadania rekurencyjne RecursiveTask<T>/ RecursiveAction, dlaczego algorytm work-stealing jest przydatny, jak dzielić zadania przez fork() i łączyć wyniki z join() wewnątrz compute(). Omówimy uruchamianie przez pool.invoke(), przykład sumy tablicy i wyszukiwania maksimum, miejsce ForkJoinPool w parallelStream(), a także typowe błędy i sposoby ich uniknięcia.
    Dostępne
  • Najlepsze praktyki programowania równoległego

    JAVA 25 SELF
    Poziom 54,Lekcja 4
    Praktyczny przewodnik po programowaniu równoległym w Javie: kiedy warto użyć ExecutorService, gdzie pomaga parallelStream i do jakich zadań potrzebny jest ForkJoinPool. Omówimy bezpieczeństwo wątkowe z ConcurrentHashMap/ CopyOnWriteArrayList i klasami atomowymi ( AtomicInteger), pomiary wydajności za pomocą System.nanoTime() i JMH, obsługę błędów z Future.get() i ForkJoinTask, poprawną reakcję na InterruptedException, a także techniki logowania ( Thread.currentThread().getName()) i testowania ( Awaitility). Na końcu — tabela doboru narzędzia i typowe błędy.
    Dostępne
  • Wprowadzenie do CompletableFuture

    JAVA 25 SELF
    Poziom 55,Lekcja 0
    W tej lekcji omówimy, dlaczego kod synchroniczny prowadzi do blokad, jakie ograniczenia miał Future (np. blokujące get()) i jak klasa CompletableFuture z pakietu java.util.concurrent zmienia sposób pracy z asynchronicznością. Poćwiczymy uruchamianie zadań w tle przez supplyAsync, subskrybowanie wyniku za pomocą thenAccept/ thenApply, omówimy rolę puli ForkJoinPool i typowe błędy: używanie get()/ join() w głównym wątku, brak obsługi błędów przez exceptionally/ handle itp.
    Dostępne
  • Zadania asynchroniczne: thenApply, thenAccept, thenRun

    JAVA 25 SELF
    Poziom 55,Lekcja 1
    Omawiamy uruchamianie i kompozycję obliczeń asynchronicznych za pomocą CompletableFuture: jak startować zadania przez supplyAsync i runAsync, czym różnią się handlery thenApply, thenAccept, thenRun i kiedy wybierać ich asynchroniczne wersje thenApplyAsync/ thenAcceptAsync/ thenRunAsync. Porozmawiamy o wątkach wykonania ( ForkJoinPool lub wasz Executor), typach wyników ( CompletableFuture<T>, CompletableFuture<Void>) i typowych błędach: blokujące get()/ join(), nieobsłużone błędy bez exceptionally/ handle/ whenComplete, a także próba użycia wyniku wewnątrz thenRun.
    Dostępne
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...
  • 30
Nauka
  • Rejestracja
  • Kurs Java
  • Pomoc w zadaniach
  • Cennik
  • Składnia Javy
Społeczność
  • Użytkownicy
  • Artykuły
  • Forum
  • Czat
  • Historie sukcesu
  • Aktywność
  • Program partnerski
Firma
  • O nas
  • Kontakt
  • Opinie
  • Dla mediów
  • CodeGym dla EDU
  • FAQ
  • Wsparcie
CodeGymCodeGym to kurs online do nauki programowania w Javie od podstaw. Kurs idealny do opanowania Javy dla początkujących. Zawiera 1200+ zadań z natychmiastową weryfikacją oraz niezbędny zakres teorii podstaw Javy. Aby pomóc Ci w nauce, wprowadziliśmy zestaw funkcji motywacyjnych: quizy, projekty programistyczne, materiały o efektywnej nauce i poradnik kariery dla programisty Java.
Obserwuj nas
Język interfejsu
English Deutsch Español हिन्दी Français Português
Polski
বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
"Programiści są tworzeni, nie rodzą się" © 2026 CodeGym
MastercardVisa
"Programiści są tworzeni, nie rodzą się" © 2026 CodeGym