CodeGym
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
  • Scoped Values i nowe mechanizmy wątków (Java 21+)

    JAVA 25 SELF
    Poziom 57,Lekcja 4
    Wyjaśniamy, dlaczego klasyczny ThreadLocal traci aktualność w świecie wątków wirtualnych i jak zastępuje go ScopedValue: kontekst powiązany z zakresem wykonania, a nie z wątkiem. Krok po kroku pokazujemy przekazywanie kontekstu (użytkownik, REQUEST_ID), zagnieżdżone zakresy i ich przesłanianie, integrację z wątkami wirtualnymi ( Executors. newVirtualThreadPerTaskExecutor()). Omawiamy porównanie ThreadLocal vs ScopedValue, praktyczne porady, ograniczenia oraz spojrzenie na Structured Concurrency (preview).
    Dostępne
  • Structured Concurrency

    JAVA 25 SELF
    Poziom 58,Lekcja 0
    Structured Concurrency przekształca chaotyczny zbiór wątków w zarządzaną hierarchię zadań: uruchamiasz podzadania w wirtualnych wątkach wewnątrz StructuredTaskScope, czekasz na nie przez join(), centralnie obsługujesz błędy throwIfFailed() i pobierasz wyniki resultNow()/ result(). Omówimy polityki zakończenia ShutdownOnFailure i ShutdownOnSuccess, porównamy z CompletableFuture, zobaczymy przykłady agregatora HTTP oraz typowe błędy podczas używania konkurencyjności strukturalnej.
    Dostępne
  • Anulowanie zadań i timeouty na całym stosie

    JAVA 25 SELF
    Poziom 58,Lekcja 1
    Jak poprawnie anulować długie i blokujące operacje w Javie: kooperatywne przerywanie przez Thread.interrupt(), anulowanie zadań przez Future.cancel() i zachowanie CancellationException, timeouty i anulowanie w CompletableFuture ( orTimeout, completeOnTimeout), structured concurrency z StructuredTaskScope, wspólny deadline (time‑budget) i propagacja timeoutów w dół stosu (w tym Instant/ Duration oraz Scoped Values). Omawiamy praktykę pracy z blokującym IO i typowe błędy.
    Dostępne
  • Synchronizatory wysokiego poziomu

    JAVA 25 SELF
    Poziom 58,Lekcja 2
    W tej lekcji omawiamy synchronizatory wysokiego poziomu z java.util.concurrent: CountDownLatch, CyclicBarrier, Phaser i Exchanger. Uczymy się koordynować uruchomienie i zakończenie zadań poprzez await()/ countDown(), budować wielorazowe fazy i działania barierowe z await(), zarządzać dynamicznymi uczestnikami „orkiestry” za pomocą register()/ arriveAndAwaitAdvance()/ arriveAndDeregister() oraz wymieniać dane parami przez exchange(). W praktyce zrealizujemy masowy start workerów i „tik gry”, a także omówimy typowe błędy: jednorazowość CountDownLatch, obsługę BrokenBarrierException i poprawne deregister(). Wszędzie obędziemy się bez bólu z wait()/ notify().
    Dostępne
  • StampedLock i liczniki o niskiej konkurencji

    JAVA 25 SELF
    Poziom 58,Lekcja 3
    Gdy ReentrantReadWriteLock i klasyczny ReadWriteLock zaczynają się dławić pod wysokim obciążeniem, z pomocą przychodzi StampedLock z optymistycznym odczytem: tandem tryOptimisticRead + validate daje niemal „darmowe” odczyty przy rzadkich zapisach. Omówimy tryby blokad, pracę ze znacznikami, ograniczenia związane z reentrantnością, porównamy z ReentrantReadWriteLock, a także przyjrzymy się licznikom o niskiej konkurencji – LongAdder i LongAccumulator – oraz temu, dlaczego wyprzedzają AtomicLong przy konkurencji. Zakończymy praktyką: cache z przewagą odczytów i mini-benchmarkiem.
    Dostępne
  • Java Memory Model (JMM)

    JAVA 25 SELF
    Poziom 58,Lekcja 4
    Omówimy zasady widoczności i porządkowania operacji w Java Memory Model: co oznacza relacja happens-before, jak i kiedy pomagają volatile, synchronized, pola final ( final) oraz dlaczego bez nich pojawiają się „nieświeże” dane. Pokażemy bezpieczną publikację obiektów, poprawny double-checked locking, niskopoziomowy dostęp przez VarHandle, wpływ false sharing i adnotację @Contended, a także praktyczne uwagi dotyczące Thread.start()/ Thread.join(), Future.get() oraz mikrobenchmarków JMH.
    Dostępne
  • Wielowątkowy odczyt i zapis plików

    JAVA 25 SELF
    Poziom 59,Lekcja 0
    Praktyczny przewodnik po równoległej pracy z plikami w Javie: kiedy wielowątkowość rzeczywiście przyspiesza IO, a kiedy nie; wybór narzędzi — Thread, pula wątków przez ExecutorService, asynchroniczność z CompletableFuture i strumienie równoległe — a także odczyt dużych plików fragmentami przez FileChannel, bezpieczny zapis do wspólnego logu oraz ograniczenia OS/FS. Omawiamy wzorce uruchamiania zadań, konfigurację pul, metody shutdown()/ awaitTermination() i typowe błędy.
    Dostępne
  • Równoległe przetwarzanie plików: ForkJoin, strumienie równoległe

    JAVA 25 SELF
    Poziom 59,Lekcja 1
    Praktyczny przewodnik po równolegleniu zadań plikowych w Javie: jak włączyć równoległość w Stream API metodą parallel()/ parallelStream(), jak działa i jak konfigurować ForkJoinPool oraz kiedy lepiej użyć RecursiveTask. Omówimy, gdzie równoległość realnie przyspiesza I/O, jak zarządzać wspólną pulą wątków i jak bezpiecznie zamykać zasoby ( try-with-resources). Na koniec – szybki rzut oka na dostęp pozycyjny przez FileChannel do odczytu/zapisu fragmentów dużych plików.
    Dostępne
  • Równoległe przejścia systemu plików: Files.walk + parallel() i ForkJoin

    JAVA 25 SELF
    Poziom 59,Lekcja 2
    Jak przyspieszyć przejście dużych katalogów i przetwarzanie tysięcy plików: używamy Files.walk() i strumieni równoległych przez parallel(), rozumiemy rolę ForkJoinPool.commonPool() i konfigurujemy stopień równoległości. Omawiamy, kiedy lepiej przejść na ExecutorService, czym różnią się zadania CPU-bound i IO-bound, piszemy przykład zliczania linii we wszystkich ".java"-plikach i utrwalamy best practices.
    Dostępne
  • Dzielenie dużych plików na części

    JAVA 25 SELF
    Poziom 59,Lekcja 3
    Jak przyspieszyć przetwarzanie plików gigabajtowych: dzielimy je na chunki (chunking), używamy dostępu pozycyjnego przez FileChannel i memory-mapped bufory MappedByteBuffer, równoleglimy obliczenia z ExecutorService. Omówimy kluczowe metody wejścia/wyjścia z pozycjonowaniem: position(...), read(...), write(...), kryteria doboru rozmiaru chunku, przykład równoległego zliczania słów i typowe błędy (granice chunków, zasoby, liczba wątków).
    Dostępne
  • Potoki przetwarzania plików: producer–consumer

    JAVA 25 SELF
    Poziom 59,Lekcja 4
    Omawiamy, jak zorganizować potok przetwarzania plików zgodnie ze wzorcem Producer–Consumer z bezpieczną wymianą przez BlockingQueue (na przykład ArrayBlockingQueue), jak działają operacje blokujące put() i take(), po co jest mechanizm backpressure i jak poprawnie kończyć wątki za pomocą „poison pill” (na przykład "__END__", a nie null). Uruchamiamy konsumentów przez ExecutorService, dodajemy wizualizację potoku i omawiamy typowe błędy.
    Dostępne
  • Wprowadzenie do modułów: po co są potrzebne

    JAVA 25 SELF
    Poziom 60,Lekcja 0
    Wyjaśniamy, po co Java 9 wprowadziła modułowy system JPMS: dlaczego „ classpath-party” jest zła, jak moduły wprowadzają granice widoczności na poziomie kontenera, czym jest module-info.java i jak pracować z dyrektywami module, exports, requires, opens, uses/ provides. Omówimy zalety (enkapsulacja, jawne zależności, bezpieczeństwo, jlink), obszary zastosowania (w tym java.base, java.sql), przydatne niuanse i typowe błędy podczas migracji (zapomniany exports, pominięty requires, duplikaty nazw modułów).
    Dostępne
  • 1
  • ...
  • 25
  • 26
  • 27
  • 28
  • 29
  • 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