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

Лекції

  • Відгуки
  • Про нас
  • CS50
Почати
Почати навчання
Почати навчання
  • Моє навчання
  • Курси
  • Університет
  • Карта квестів
  • Лекції
  • Scoped values і нові механізми потоків (Java 21+)

    JAVA 25 SELF
    57 рівень, 4 лекція
    Розбираємо, чому класичний ThreadLocal втрачає актуальність у світі віртуальних потоків, і як йому на зміну приходить ScopedValue: контекст, прив’язаний до області виконання, а не до потоку. Покрокові приклади передачі контексту (користувач, REQUEST_ID), вкладені scope та їх перекриття, інтеграція з віртуальними потоками ( Executors. newVirtualThreadPerTaskExecutor()). Обговорюємо порівняння ThreadLocal vs ScopedValue, практичні поради, обмеження та погляд на Structured Concurrency (preview).
    Відкрита
  • Structured Concurrency

    JAVA 25 SELF
    58 рівень, 0 лекція
    Structured Concurrency перетворює хаотичний набір потоків на керовану ієрархію завдань: ви запускаєте підзадачі у віртуальних потоках всередині StructuredTaskScope, чекаєте їх через join(), централізовано обробляєте помилки throwIfFailed() і отримуєте результати resultNow()/ result(). Розберемо політики завершення ShutdownOnFailure і ShutdownOnSuccess, порівняємо з CompletableFuture, подивимося приклади HTTP‑агрегатора й типові помилки під час використання структурованої конкурентності.
    Відкрита
  • Скасування завдань і тайм‑аути крізь стек

    JAVA 25 SELF
    58 рівень, 1 лекція
    Як коректно скасовувати тривалі та блокувальні операції в Java: кооперативне переривання через Thread.interrupt(), скасування завдань через Future.cancel() і поведінка CancellationException, тайм‑аути та скасування в CompletableFuture ( orTimeout, completeOnTimeout), структурована конкурентність із StructuredTaskScope, спільний дедлайн (time‑budget) та прокидання тайм‑аутів униз по стеку (включно з Instant/ Duration і Scoped Values). Розбираємо практику роботи з блокувальним IO та типові помилки.
    Відкрита
  • Високорівневі синхронізатори

    JAVA 25 SELF
    58 рівень, 2 лекція
    У лекції розглядаємо високорівневі синхронізатори з java.util.concurrent: CountDownLatch, CyclicBarrier, Phaser і Exchanger. Навчаємося координувати запуск і завершення завдань через await()/ countDown(), будувати багаторазові фази й бар’єрні дії з await(), керувати динамічними учасниками «оркестру» за допомогою register()/ arriveAndAwaitAdvance()/ arriveAndDeregister() та обмінюватися даними попарно через exchange(). На практиці реалізуємо масовий старт воркерів і «ігровий тік», а також розберемо типові помилки: одноразовість CountDownLatch, оброблення BrokenBarrierException і коректний deregister(). Усюди обходимося без болю від wait()/ notify().
    Відкрита
  • StampedLock і лічильники з низькою конкуренцією

    JAVA 25 SELF
    58 рівень, 3 лекція
    Коли ReentrantReadWriteLock і класичний ReadWriteLock починають «просідати» під високим навантаженням, на виручку приходить StampedLock з оптимістичним читанням: зв’язка tryOptimisticRead + validate дає майже «безкоштовні» читання за рідкісних записів. Розглянемо режими блокувань, роботу зі штампами, обмеження щодо реентрантності, порівняємо з ReentrantReadWriteLock, а також подивимося на лічильники з низькою конкуренцією — LongAdder і LongAccumulator — і чому вони обходять AtomicLong за високої конкуренції. Завершимо практикою: кеш із переважаючим читанням і міні-бенчмарком.
    Відкрита
  • Java Memory Model (JMM)

    JAVA 25 SELF
    58 рівень, 4 лекція
    Розбираємо правила видимості та впорядкування операцій у Java Memory Model: що означає відношення happens-before, як і коли допомагають volatile, synchronized, фінальні поля ( final), і чому без них виникають «несвіжі» дані. Покажемо безпечну публікацію об’єктів, коректний double-checked locking, низькорівневий доступ через VarHandle, вплив хибного поділу та анотацію @Contended, а також практичні зауваження про Thread.start()/ Thread.join(), Future.get() і мікробенчмарки JMH.
    Відкрита
  • Багатопотокове читання та запис файлів

    JAVA 25 SELF
    59 рівень, 0 лекція
    Практичний посібник з паралельної роботи з файлами в Java: коли багатопоточність справді пришвидшує I/O, а коли — ні; вибір інструментів — Thread, пул потоків через ExecutorService, асинхронність із CompletableFuture та паралельні стріми — а також читання великих файлів частинами через FileChannel, безпечний запис у спільний лог і обмеження ОС/ФС. Розглядаємо шаблони запуску завдань, налаштування пулів, методи shutdown()/ awaitTermination() і типові помилки.
    Відкрита
  • Паралельна обробка файлів: ForkJoin, Parallel Streams

    JAVA 25 SELF
    59 рівень, 1 лекція
    Практичний посібник з розпаралелювання файлових задач у Java: як увімкнути паралельність у Stream API методом parallel()/ parallelStream(), як працює та налаштовується ForkJoinPool і коли краще використовувати RecursiveTask. Обговоримо, де паралельність справді пришвидшує I/O, як керувати спільним пулом потоків і як безпечно закривати ресурси ( try-with-resources). Наприкінці — швидкий погляд на позиційний доступ через FileChannel для читання/запису частин великих файлів.
    Відкрита
  • Паралельні обходи ФС: Files.walk() + parallel() та ForkJoin

    JAVA 25 SELF
    59 рівень, 2 лекція
    Як прискорити обхід великих директорій та обробку тисяч файлів: використовуємо Files.walk() та паралельні стріми через parallel(), з’ясовуємо роль ForkJoinPool.commonPool() і налаштовуємо ступінь паралелізму. З’ясовуємо, коли краще перейти на ExecutorService, чим відрізняються CPU-bound і IO-bound завдання, пишемо приклад підрахунку рядків у всіх ".java"-файлах і фіксуємо найкращі практики.
    Відкрита
  • Розбиття великих файлів на чанки

    JAVA 25 SELF
    59 рівень, 3 лекція
    Як пришвидшити обробку гігабайтних файлів: ділимо їх на чанки (chunking), використовуємо позиційний доступ через FileChannel і memory-mapped буфери MappedByteBuffer, паралелізуємо обчислення з ExecutorService. Розберемо ключові методи позиційного введення‑виведення: position(...), read(...), write(...), критерії вибору розміру чанка, приклад паралельного підрахунку слів і типові помилки (межі чанків, ресурси, кількість потоків).
    Відкрита
  • Конвеєри обробки файлів: producer–consumer

    JAVA 25 SELF
    59 рівень, 4 лекція
    Розбираємо, як організувати конвеєр обробки файлів за патерном Producer–Consumer із безпечним обміном через BlockingQueue (наприклад, ArrayBlockingQueue), як працюють блокувальні операції put() і take(), навіщо потрібен механізм backpressure і як коректно завершувати потоки за допомогою «poison pill» (наприклад, "__END__", а не null). Запускаємо споживачів через ExecutorService, додаємо візуалізацію конвеєра та розбираємо типові помилки.
    Відкрита
  • Вступ до модулів: навіщо вони потрібні

    JAVA 25 SELF
    60 рівень, 0 лекція
    Розбираємося, навіщо Java 9 запровадила модульну систему JPMS: чим погана « classpath-party», як модулі запроваджують межі видимості на рівні контейнера, що таке module-info.java і як працювати з директивами module, exports, requires, opens, uses/ provides. Обговоримо переваги (інкапсуляція, явні залежності, безпека, jlink), сфери застосування (включно з java.base, java.sql), корисні нюанси та типові помилки під час міграції (забутий exports, пропущений requires, дублікати імен модулів).
    Відкрита
  • 1
  • ...
  • 25
  • 26
  • 27
  • 28
  • 29
  • ...
  • 57
Навчання
  • Курси програмування
  • Реєстрація
  • Курс Java
  • Допомога із задачами
  • Ціни
Спільнота
  • Користувачі
  • Статті
  • Форум
  • Чат
  • Історії успіху
  • Дії
Компанія
  • Про нас
  • Контакти
  • Відгуки
  • FAQ
  • Підтримка
JavaRush JavaRush — це інтерактивний онлайн-курс вивчення Java-програмування з нуля. Він містить 1200 практичних задач із перевіркою розв'язання одним клацанням, необхідний мінімум знань із теоретичних основ Java, а ще мотивувальні «фішки», які допоможуть пройти курс до кінця: ігри, опитування, цікаві проєкти й статті про ефективне навчання та кар'єру Java‑девелопера.
Підписуйтесь
Мова інтерфейсу
Русский English
Українська
Програмістами не народжуються © 2026 JavaRush
MastercardVisa
Програмістами не народжуються © 2026 JavaRush