Асинхронное программирование на Java

Асинхронность - это способ написания программы или ее части так, чтобы последовательное, шаг за шагом, выполнение программных задач не блокировало начало выполнения новых задач. При такой парадигме программа может начать выполнение следующей задачи, пока предыдущая еще выполняется. Это делает программу более эффективной, способной быстро и своевременно реагировать на запросы.

Этот курс позволит вам сформировать необходимую базу знаний и практических навыков для успешной работы с асинхронным кодом.

Курс "Асинхронное программирование в Java" начинается с обзора особенностей многопоточного программирования. Вы ознакомитесь с работой потоков, их состоянием, научитесь создавать и использовать их. Также вы ознакомитесь с основными идеями о работе с потоками и механизмами, такими как мьютэкс, монитор и семафор.

На втором уроке вы узнаете о наборе специализированных коллекций, которые оптимальнее и надежнее работают в многопоточной среде, чем стандартные универсальные коллекции из пакета java.util.

Вы рассмотрите основы асинхронного программирования в языке Java. Также ознакомитесь с концепцией асинхронного программирования, определите разницу между ним и другими подходами к многопоточному программированию, и научитесь создавать и запускать асинхронные задачи. Вы сможете понять, как работать с группой потоков с помощью ThreadPool, построите собственную реализацию пула потоков и рассмотрите, как управлять жизненным циклом потоков с помощью ExecutorService.

Далее мы подробно рассмотрим Future API, изучим различия между Future и CompletableFuture, а также ознакомимся с некоторыми интерфейсами из пакета java.util.function, которые широко используются в CompletableFuture. Вы научитесь создавать CompletableFuture, а также использовать методы runAsync и supplyAsync и методы thenCombine, и thenCompose, которые применяются для объединения двух задач. Кроме того, мы подробно рассмотрим методы allOf и anyOf, которые позволяют объединять более чем две задачи, и рассмотрим их практическое использование.

Продолжая курс, мы рассмотрим важные аспекты использования асинхронности в веб-приложениях, которые построены на Spring. Мы подробно проанализируем, в каких случаях и для каких задач следует использовать аннотацию @Async и интерфейс AsyncConfigurer. Также мы рассмотрим различия между асинхронным и синхронным выполнением в веб-приложениях и опишем практические шаги по построению веб-приложений с использованием асинхронности.

Вы познакомитесь с ScheduleExecutorService и научитесь создавать отложенные задачи с его помощью. Мы также исследуем, как использовать отложенный запуск методов во фреймворке Spring, ознакомимся с обработкой асинхронных ошибок в Spring framework.  Мы подробно рассмотрим проблемы с тестированием асинхронного кода и познакомимся с готовым решением: библиотекой Awaitility - разберем ее ключевые методы (await, unit, atLeast, atMost, pollInterval) и рассмотрим практические примеры написания юнит тестов для тестирования асинхронного кода.

На последнем уроке мы рассмотрим важные паттерны проектирования - Producer-Consumer и Scatter-Gather. Вы разберетесь в том, как эти паттерны работают, и узнаете о различных инструментах, основанных на них. Кроме теоретического аспекта, вы также увидите практические реализации этих паттернов, что позволит вам эффективно использовать их в проектировании своих многопоточных приложений.

ВИДЕОУРОК №1. Многопоточное программирование

После завершения этого модуля участники получат понимание концепции многопоточного программирования, ознакомятся с работой потоков, их состоянием и научатся создавать и использовать их. Также будут ознакомлены с основными идеями по работе с потоками, такими как мьютэкс, монитор и семафор, и научатся использовать ключевое слово synchronized, а также семафоры для обеспечения одновременного доступа к ресурсам из нескольких потоков