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
  • Wzorzec Observer (obserwator)

    JAVA 25 SELF
    Poziom 50,Lekcja 3
    Behawioralny wzorzec „Obserwator”: role Subject i Observer, subskrypcja/wyrejestrowanie przez addObserver/ removeObserver, oraz dystrybucja powiadomień metodą notifyObservers. Omawiamy powiązanie z modelem zdarzeń Javy: button. addActionListener( listener) ; → wywołanie actionPerformed(). Praktyka na przykładach (termometr i klimatyzator, mini‑licznik i lambdy), a także dlaczego java.util.Observable/ Observer są przestarzałe i jakie istnieją nowoczesne podejścia.
    Dostępne
  • Wątek EDT i długie operacje w UI

    JAVA 25 SELF
    Poziom 50,Lekcja 4
    W tej lekcji wyjaśniamy, czym jest wątek obsługi zdarzeń UI — EDT w Swing oraz jego odpowiednik JavaFX Application Thread, dlaczego komponenty interfejsu nie są bezpieczne wątkowo i z jakiego powodu okno „zawiesza się” przy ciężkich zadaniach. Pokażemy właściwe techniki: przenoszenie obliczeń do tła przez new Thread(...), aktualizację interfejsu wywołaniami SwingUtilities.invokeLater i Platform.runLater, a także użycie narzędzi wyższego poziomu SwingWorker<T, V> oraz Task<V>/ Service<V> do obsługi postępu, anulowania i błędów.
    Dostępne
  • Wprowadzenie do wielowątkowości: po co jest potrzebna

    JAVA 25 SELF
    Poziom 51,Lekcja 0
    Po co programom wątki i równoległość: od responsywnego interfejsu po wykorzystanie wszystkich rdzeni procesora. Omawiamy różnicę między procesami a wątkami, rolę głównego wątku main w JVM, praktyczne przypadki użycia (UI, serwery, przetwarzanie plików) oraz ryzyka: race condition, deadlock, a także podstawowe narzędzia synchronizacji, takie jak synchronized. Pokażemy prosty przykład z Thread i uruchomieniem dwóch zadań równolegle.
    Dostępne
  • Uruchamianie wątków: Thread i Runnable, składnia

    JAVA 25 SELF
    Poziom 51,Lekcja 1
    W wykładzie omawiamy uruchamianie wątków w Javie: poznajemy klasę Thread i interfejs Runnable, uczymy się poprawnie wywoływać start() i nie mylić go z run(), używamy klas anonimowych i wyrażeń lambda, uruchamiamy kilka wątków i przyglądamy się cyklowi życia ( NEW → RUNNABLE → TERMINATED). Porozmawiamy o metodach Thread.currentThread(), getName(), oczekiwaniu przez join() oraz typowych błędach, takich jak IllegalThreadStateException.
    Dostępne
  • Stany i cykl życia wątku

    JAVA 25 SELF
    Poziom 51,Lekcja 2
    Omawiamy cykl życia wątku w Javie: od Thread.State (
    NEW
    ,
    RUNNABLE
    ,
    BLOCKED
    ,
    WAITING
    ,
    TIMED_WAITING
    ,
    TERMINATED
    ) do przejść między nimi. Uczymy się zarządzać wątkami za pomocą Thread.sleep(...), join(), interrupt(), diagnozować stan przez isAlive() i getState(), a także unikać przestarzałych metod typu stop()/ suspend()/ resume(). Na końcu — praktyczne wskazówki i najczęstsze błędy.
    Dostępne
  • Parametry i priorytety wątków

    JAVA 25 SELF
    Poziom 51,Lekcja 3
    Jak bezpiecznie przekazywać parametry do wątków przez konstruktor klasy implementującej Runnable, kiedy sensowne są wyrażenia lambda i dlaczego pola lepiej oznaczać jako final. Omawiamy priorytety wątków: metody setPriority/ getPriority, stałe Thread.MIN_PRIORITY, Thread.NORM_PRIORITY, Thread.MAX_PRIORITY i ich wpływ na planistę (scheduler). Plus – nazywanie wątków przez konstruktor, setName/ getName, praktyczny przykład i typowe błędy (wspólny Runnable, settery, nadzieje pokładane w priorytetach).
    Dostępne
  • Warunek wyścigu (race condition)

    JAVA 25 SELF
    Poziom 51,Lekcja 4
    W wykładzie wyjaśniamy, czym jest warunek wyścigu: gdy kilka wątków jednocześnie uzyskuje dostęp do wspólnych danych, a wynik zależy od harmonogramu. Na przykładzie inkrementacji counter ++ pokazujemy, dlaczego operacja nie jest atomowa i jak gubią się inkrementy. Omawiamy praktyczny przypadek z rachunkiem bankowym, konsekwencje na produkcji i podejścia do ochrony: synchronized, typy atomowe z java.util.concurrent.atomic (na przykład AtomicInteger), a także niezmienność. Kończymy sekcją „Typowe błędy”, w której wyjaśniamy, dlaczego bugi związane z Thread rzadko są wychwytywane testami i dlaczego „leczenie” ich przez Thread. sleep( 1) jest bez sensu.
    Dostępne
  • Wspólne zasoby i synchronizacja: problemy dostępu

    JAVA 25 SELF
    Poziom 52,Lekcja 0
    Ten wykład dotyczy tego, czym jest zasób współdzielony w aplikacjach wielowątkowych, dlaczego powstają stany wyścigu (race condition) i „utracone aktualizacje”, oraz jak chronić dane za pomocą synchronized. Omówimy podstawowe techniki synchronizacji (metody i bloki), porozmawiamy o nowoczesnych narzędziach z java.util.concurrent ( Lock, ReentrantLock, Semaphore i in.), zobaczymy praktyczne przykłady z inkrementacją licznika oraz typowe błędy (nieatomowość i ++, niewłaściwy obiekt blokady, mity na temat volatile).
    Dostępne
  • synchronized, volatile: składnia i zastosowanie

    JAVA 25 SELF
    Poziom 52,Lekcja 1
    Praktyczny wykład o wielowątkowości: omawiamy, jak działa słowo kluczowe synchronized (bloki i metody, monitor obiektu oraz blokada na poziomie klasy ClassName.class), czym różni się widoczność zmian przez volatile od atomowości operacji, dlaczego wygodnie jest używać flag boolean jako volatile, a inkrementacja count ++ wymaga synchronizacji. Porównamy, kiedy wybrać synchronized, a kiedy – volatile, i omówimy typowe błędy.
    Dostępne
  • ReentrantLock i ReadWriteLock: różnice, przykłady

    JAVA 25 SELF
    Poziom 52,Lekcja 2
    Praktyczne porównanie klasycznej synchronizacji za pomocą synchronized z bardziej elastycznymi prymitywami z pakietu java.util.concurrent.locks: ReentrantLock i ReadWriteLock. Omówimy, jak jawnie zarządzać blokadami ( lock()/ unlock(), tryLock() z timeoutem), jak skalować odczyt za pomocą ReentrantReadWriteLock, czym jest „sprawiedliwość” ( fair mode), gdzie który mechanizm ma sens i jakie błędy zdarzają się najczęściej.
    Dostępne
  • Muteksy i semafory: składnia i zadania

    JAVA 25 SELF
    Poziom 52,Lekcja 3
    W tej lekcji omówimy kluczowe prymitywy synchronizacji w Javie: jak chronić sekcje krytyczne za pomocą synchronized i klasy ReentrantLock (metody lock()/ unlock(), konstrukcja try- finally), a także jak ograniczać równoległość przez Semaphore (metody acquire()/ release()). Porównamy muteks i semafor w tabeli, rozważymy praktyczne przypadki (bank, serwer z limitem połączeń) oraz typowe błędy, prowadzące do deadlock i spadków wydajności.
    Dostępne
  • Analiza typowych błędów synchronizacji

    JAVA 25 SELF
    Poziom 52,Lekcja 4
    Praktyczne omówienie częstych błędów wielowątkowości w Javie: zapomniane unlock()/ release() przy ReentrantLock i Semaphore (rozwiązuje się przez try- finally), wybór niewłaściwego monitora dla synchronized, wzajemne blokady (deadlock) i kolejność przejmowania blokad, nadmierna synchronizacja, a także granice stosowalności volatile oraz zamiana na AtomicInteger. Przykłady, wskazówki i przystępne analogie — żeby kod nie „stawał dęba”.
    Dostępne
  • 1
  • ...
  • 22
  • 23
  • 24
  • 25
  • 26
  • ...
  • 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ę" © 2025 CodeGym
MastercardVisa
"Programiści są tworzeni, nie rodzą się" © 2025 CodeGym