JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема

Лекции

  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Мое обучение
  • Курсы
  • Университет
  • Карта квестов
  • Лекции
  • Комбинирование CompletableFuture: thenCombine, allOf, anyOf

    JAVA 25 SELF
    55 уровень,2 лекция
    Как параллелить задачи и объединять результаты с помощью CompletableFuture: объединение двух результатов через thenCombine/ thenCombineAsync, ожидание набора задач через allOf, реакция на самый быстрый ответ через anyOf. Разберём сигнатуры, практические примеры с supplyAsync, неблокирующую обработку ( thenAccept, thenRun), а также нюансы ошибок и их обработку ( exceptionally, handle, whenComplete). В конце — компактная таблица сравнения методов.
    Открыта
  • Обработка ошибок в асинхронном коде: exceptionally, handle

    JAVA 25 SELF
    55 уровень,3 лекция
    Как безопасно ловить и обрабатывать исключения в цепочках CompletableFuture: разбираем роли exceptionally (резервное значение при ошибке), handle (универсальный обработчик успеха/ошибки) и whenComplete (побочные действия без изменения результата). Обсудим, почему прямой вызов get()/ join() заворачивает причины в ExecutionException/ CompletionException, как комбинировать этапы ( thenApply, thenAccept) и каких типичных ошибок избегать.
    Открыта
  • thenCompose + кастомный Executor + тайм-ауты

    JAVA 25 SELF
    55 уровень,4 лекция
    Как правильно «склеивать» асинхронные шаги в CompletableFuture с помощью thenCompose и когда достаточно thenApply; как и зачем подключать собственный пул потоков через ExecutorService (вместо ForkJoinPool.commonPool()); как обезопасить цепочки от «вечного ожидания» с помощью orTimeout и completeOnTimeout. В конце — практический пример с кастомным Executor, thenCompose и тайм-аутом, а также типичные ошибки и их решения.
    Открыта
  • Асинхронное IO: AsynchronousFileChannel (NIO2)

    JAVA 25 SELF
    56 уровень,0 лекция
    В этой лекции разбираем асинхронный ввод/вывод (AIO) в Java NIO.2: чем он отличается от синхронного IO, как работать с AsynchronousFileChannel, запускать операции чтения/записи через Future и CompletionHandler, а также как влияет выбор пула потоков ExecutorService. На практике посмотрим открытие канала через open, методы read/ write, схему взаимодействия и частые ошибки.
    Открыта
  • Future, CompletionHandler: обработка завершения операций

    JAVA 25 SELF
    56 уровень,1 лекция
    Как в Java обрабатывать завершение асинхронных операций NIO2: «обещания» через Future и обратные вызовы через CompletionHandler. Разберём сигнатуры read/ write у AsynchronousFileChannel, блокирующее получение результата через get() и опрос isDone(), а также неблокирующую обработку в completed()/ failed(). Покажем практические примеры чтения/записи и краткое сравнение подходов.
    Открыта
  • Асинхронная обработка текстовых файлов

    JAVA 25 SELF
    56 уровень,2 лекция
    Практикуем асинхронный ввод-вывод в Java: читаем большие текстовые файлы блоками в ByteBuffer через AsynchronousFileChannel, корректно преобразуем байты в символы с помощью CharsetDecoder, пишем данные обратно асинхронно (через Future или CompletionHandler). Разбираем проблему «разрыва» многобайтных символов (например, "UTF-8"), подсчёт строк на лету, выбор кодировок и типичные ошибки при работе с буферами и каналами.
    Открыта
  • Обработка ошибок в async IO, отмена операций

    JAVA 25 SELF
    56 уровень,3 лекция
    Как корректно ловить и обрабатывать ошибки в асинхронном вводе-выводе Java: колбэки CompletionHandler с методами completed/ failed, логирование и уведомления. Разбираем отмену операций через Future и cancel( boolean), последствия для get() и CancellationException, а также практические советы: try-with-resources, синхронизация с CountDownLatch/ CompletableFuture и освобождение ресурсов.
    Открыта
  • Разбор ошибок при асинхронной работе с файлами

    JAVA 25 SELF
    56 уровень,4 лекция
    Практический разбор подводных камней при работе с асинхронным файловым вводом-выводом в Java NIO: корректное управление буферами ByteBuffer (свойства position/ limit, вызовы flip(), clear(), compact()), гонки при параллельных операциях с AsynchronousFileChannel, закрытие ресурсов ( channel.close(), try-with-resources), обработка ошибок в CompletionHandler (метод failed(...)), управление жизненным циклом операций через Future<Integer> и синхронизацию с CountDownLatch, корректная работа с кодировками через CharsetDecoder, а также выбор подходящего пула потоков ExecutorService.
    Открыта
  • Потоки против виртуальных потоков: отличие, преимущества

    JAVA 25 SELF
    57 уровень,0 лекция
    Разбираем, чем отличаются платформенные потоки от виртуальных: как работает модель « Platform Thread → ОС» и почему она тяжёлая, что меняется с виртуальными потоками ( Virtual Thread) поверх carrier threads, и как это даёт масштабируемость без реактивной «лапши». Посмотрим на практику с Thread.ofVirtual(), сравним поведение для I/O‑bound и CPU‑bound задач, затронем совместимость (блокирующие вызовы вроде InputStream.read, Socket.accept) и типичные ошибки (старые синхронизации, ожидания «магического ускорения»).
    Открыта
  • Создание виртуальных потоков: Thread.ofVirtual().start()

    JAVA 25 SELF
    57 уровень,1 лекция
    Практика работы с виртуальными потоками Java 21: чем отличаются от платформенных, как запускать через Thread.startVirtualThread(...) и Thread.ofVirtual().start(...), когда по-прежнему уместно new Thread(...) или Thread.ofPlatform(), и как массово исполнять задачи с помощью Executors.newVirtualThreadPerTaskExecutor(). Разберём ожидание завершения через join(), обработку ошибок с Future и ExecutionException, а также типичные ошибки при использовании Virtual Threads.
    Открыта
  • Масштабируемость и производительность Virtual Threads

    JAVA 25 SELF
    57 уровень,2 лекция
    Практическое сравнение платформенных потоков Thread и виртуальных потоков Java 21: как JVM благодаря « носителям» (carrier threads) исполняет сотни тысяч задач с минимальной памятью, где виртуальные потоки раскрывают себя (I/O-bound), а где нет (CPU-bound). Разберём ограничения ( synchronized, нативные блокировки), лучшие практики ( Executors.newVirtualThreadPerTaskExecutor()), мониторинг через JVisualVM и Java Flight Recorder, а также типичные ошибки при переходе на Virtual Threads.
    Открыта
  • Использование Executor с виртуальными потоками

    JAVA 25 SELF
    57 уровень,3 лекция
    Разбираем, как запускать одну задачу в одном виртуальном потоке с помощью Executors.newVirtualThreadPerTaskExecutor() (Java 21), чем это отличается от классических пулов ( newFixedThreadPool, newCachedThreadPool), как правильно завершать работу через shutdown() и awaitTermination(...), получать результаты задач через Future и где виртуальные потоки дают максимальный выигрыш (массовый I/O, веб-сервера, нагрузочное тестирование). В конце — типичные ошибки и нюансы.
    Открыта
  • 1
  • ...
  • 24
  • 25
  • 26
  • 27
  • 28
  • ...
  • 57
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2025 JavaRush
MastercardVisa
"Программистами не рождаются" © 2025 JavaRush