JavaRush
AI Academy
new
Акція
Університет
Java FullStack
Python FullStack
AI Native Developer
new
Навчання
Курси
Задачі
Опитування
Ігри
Допомога
Графік стусанів
Стажування
Спільнота
Користувачі
Форум
Чат
Статті
Історії успіху
Дії
Відгуки
Передплати
Світла тема

Лекції

  • Відгуки
  • Про нас
  • CS50
Почати
Почати навчання
Почати навчання
  • Моє навчання
  • Курси
  • Університет
  • Карта квестів
  • Лекції
  • Deadlock: причини, приклади, усунення

    JAVA 25 SELF
    53 рівень, 0 лекція
    У цій лекції розберемося, що таке взаємне блокування потоків (deadlock) у Java, чому воно відбувається та які чотири умови для цього потрібні. На практичному прикладі з synchronized показуємо відтворення проблеми, далі вивчаємо стратегії профілактики: єдиний порядок захоплення ресурсів, використання ReentrantLock.tryLock із тайм-аутом, скорочення критичних секцій та відмова від зайвих вкладених блокувань. Покажемо діагностику за допомогою Thread Dump і jstack, як розпізнати стани BLOCKED/ WAITING і завершимо чеклістом та типовими помилками.
    Відкрита
  • Livelock і Starvation: визначення, приклади

    JAVA 25 SELF
    53 рівень, 1 лекція
    Розбираємо конкурентні аномалії Livelock і Starvation: чим вони відрізняються від Deadlock, як виглядають у коді та в логах. Показано приклади на Java: «ввічливі працівники» (оживлене блокування) і голодування за пріоритетами та через несправедливі блокування. Навчаємося виявляти проблему (логування, Thread dump, VisualVM, Java Mission Control) і запобігати їй: випадкові затримки перед повторною спробою ( Thread.sleep), неблокувальні алгоритми, справедливі блокування через ReentrantLock із прапорцем fairness ( new ReentrantLock(true)), акуратні критичні секції та відмова від зловживання setPriority() і synchronized.
    Відкрита
  • Thread-safe колекції: ConcurrentHashMap та інші

    JAVA 25 SELF
    53 рівень, 2 лекція
    У цій лекції розберемо, чому звичайні колекції ( ArrayList, HashMap) небезпечні у багатопоточному середовищі, і які потокобезпечні альтернативи пропонує пакет java.util.concurrent: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue, структури на основі skip-list і BlockingQueue. Обговоримо атомарні операції на кшталт merge, putIfAbsent, computeIfAbsent, порівняємо з Collections.synchronizedMap, розглянемо практичні приклади та типові помилки (слабкоконсистентні ітератори, неатомарні послідовності операцій тощо).
    Відкрита
  • AtomicInteger, AtomicReference: атомарні операції

    JAVA 25 SELF
    53 рівень, 3 лекція
    Чому інкремент i ++ не працює в багатопоточності, що таке атомарні операції і як їх забезпечує пакет java.util.concurrent.atomic. Розглядаємо AtomicInteger і AtomicReference, методи incrementAndGet(), compareAndSet(...), внутрішній механізм CAS (Compare-And-Swap), а також коли краще обрати synchronized і коли — LongAdder. Наприкінці — типові помилки: складні операції, ABA і потокобезпечність вкладених об’єктів.
    Відкрита
  • Діагностика та налагодження багатопотокових програм

    JAVA 25 SELF
    53 рівень, 4 лекція
    Як знімати й читати Thread Dump за допомогою jstack, VisualVM та IDE, розпізнавати стани потоків ( RUNNABLE, BLOCKED, WAITING) та виявляти взаємні блокування. Розберемо моніторинг потоків у Java Mission Control та Java Flight Recorder, практики логування (імена потоків, вхід/вихід із synchronized), мінімізацію блокувань, тестування конкурентності з CountDownLatch та розбір реального кейсу deadlock. У фіналі — типові помилки та як їх уникнути.
    Відкрита
  • Вступ до паралелізму

    JAVA 25 SELF
    54 рівень, 0 лекція
    У цій лекції розбираємо різницю між багатопоточністю та паралелізмом: де важлива швидка реакція, а де — реальне прискорення на кількох ядрах. Обговоримо створення потоків через Thread, реалізацію Runnable і високорівневі пули ExecutorService, подивимося на простий приклад підсумовування масиву, розберемо, коли паралелізм допомагає, а коли заважає, а також типові проблеми: гонки даних, синхронізацію через synchronized, взаємні блокування та балансування навантаження. Наприкінці — порівняльна таблиця і візуалізація сценаріїв.
    Відкрита
  • ExecutorService, Callable, Future: запуск завдань

    JAVA 25 SELF
    54 рівень, 1 лекція
    Практика багатопоточності по-дорослому: передаємо завдання в ExecutorService замість ручного створення Thread, керуємо пулом, чергою та життєвим циклом ( shutdown(), shutdownNow()). Розберемо різницю між Runnable і Callable<T>, отримуємо результати через Future і його методи ( get(), isDone(), cancel(...), isCancelled()). Покажемо запуск кількох завдань, invokeAll/ invokeAny, обробку ExecutionException і типові помилки.
    Відкрита
  • Паралельні стріми: синтаксис, застосування

    JAVA 25 SELF
    54 рівень, 2 лекція
    Розбираємося, як переключити звичайний потік даних на паралельну обробку одним рядком коду — через parallelStream() або .parallel(), що відбувається під капотом у ForkJoinPool.commonPool(), коли паралельність справді пришвидшує обчислення (великі колекції, «важкі» операції) і де вона може сповільнити роботу. Покажемо приклади фільтрації, агрегації, сортування, вимірювання продуктивності та розберемо типові помилки: побічні ефекти у forEach, збереження порядку, вибір колекцій і налаштування ступеня паралелізму.
    Відкрита
  • ForkJoinPool і RecursiveTask: рекурсивні завдання

    JAVA 25 SELF
    54 рівень, 3 лекція
    Практичний посібник із паралельних обчислень у Java: як працює пул завдань ForkJoinPool і рекурсивні завдання RecursiveTask<T>/ RecursiveAction, чим корисний алгоритм work-stealing, як ділити завдання через fork() і об’єднувати результати з join() всередині compute(). Розберемо запуск через pool.invoke(), приклад суми масиву та пошуку максимуму, місце ForkJoinPool у parallelStream(), а також типові помилки та способи їх уникнути.
    Відкрита
  • Найкращі практики паралельного програмування

    JAVA 25 SELF
    54 рівень, 4 лекція
    Практичний посібник із паралельного програмування в Java: коли варто використовувати ExecutorService, де допомагає parallelStream, і для яких задач потрібен ForkJoinPool. Обговоримо потокобезпечність із ConcurrentHashMap/ CopyOnWriteArrayList та атомарними класами ( AtomicInteger), вимірювання продуктивності через System.nanoTime() і JMH, обробку помилок із Future.get() і ForkJoinTask, коректну реакцію на InterruptedException, а також прийоми логування ( Thread.currentThread().getName()) та тестування ( Awaitility). Наприкінці — таблиця вибору інструмента та типові помилки.
    Відкрита
  • Вступ до CompletableFuture

    JAVA 25 SELF
    55 рівень, 0 лекція
    У цій лекції розберемо, чому синхронний код призводить до блокувань, які обмеження мав інтерфейс Future (на кшталт блокувального виклику get()), і як клас CompletableFuture із пакета java.util.concurrent змінює стиль роботи з асинхронністю. Потренуємося запускати завдання у фоні через supplyAsync, підписуватися на результат за допомогою thenAccept/ thenApply, обговоримо роль пулу ForkJoinPool і типові помилки: використання get()/ join() у головному потоці, відсутність обробки помилок через exceptionally/ handle тощо.
    Відкрита
  • Асинхронні завдання: thenApply, thenAccept, thenRun

    JAVA 25 SELF
    55 рівень, 1 лекція
    Розбираємо запуск і композицію асинхронних обчислень за допомогою CompletableFuture: як стартувати завдання через supplyAsync і runAsync, чим відрізняються обробники thenApply, thenAccept, thenRun, і коли обирати їх асинхронні версії thenApplyAsync/ thenAcceptAsync/ thenRunAsync. Поговоримо про потоки виконання ( ForkJoinPool або ваш Executor), типи результатів ( CompletableFuture<T>, CompletableFuture<Void>) і типові помилки: блокувальні виклики get()/ join(), необроблені помилки без exceptionally/ handle/ whenComplete, а також спроба використати результат усередині thenRun.
    Відкрита
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...
  • 57
Навчання
  • Курси програмування
  • Реєстрація
  • Курс Java
  • Допомога із задачами
  • Ціни
Спільнота
  • Користувачі
  • Статті
  • Форум
  • Чат
  • Історії успіху
  • Дії
Компанія
  • Про нас
  • Контакти
  • Відгуки
  • FAQ
  • Підтримка
JavaRush JavaRush — це інтерактивний онлайн-курс вивчення Java-програмування з нуля. Він містить 1200 практичних задач із перевіркою розв'язання одним клацанням, необхідний мінімум знань із теоретичних основ Java, а ще мотивувальні «фішки», які допоможуть пройти курс до кінця: ігри, опитування, цікаві проєкти й статті про ефективне навчання та кар'єру Java‑девелопера.
Підписуйтесь
Мова інтерфейсу
Русский English
Українська
Програмістами не народжуються © 2026 JavaRush
MastercardVisa
Програмістами не народжуються © 2026 JavaRush