JavaRush
Акція
Університет
Java FullStack
Python FullStack
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