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