Асинхронне програмування на 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, а також семафори для забезпечення одночасного доступу до ресурсів з декількох потоків