Про курс
Асинхронність - це спосіб написання програми чи її частини так, щоб послідовне, крок за кроком, виконання програмних завдань не блокувало початок виконання нових завдань. За такою парадигмою програма може розпочати виконання наступного завдання, доки попереднє ще виконується. Це робить програму більш ефективною, здатною швидко та вчасно реагувати на запити.
Цей курс дозволить вам сформувати необхідну базу знань та практичних навичок для успішної роботи з асинхронним кодом
Курс «Асинхронне програмування в 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. Ви розберетеся в тому, як ці патерни працюють, і дізнаєтеся про різні інструменти, що ґрунтуються на них. Крім теоретичного аспекту, ви також побачите практичні реалізації цих патернів, що дозволить вам ефективно використовувати їх у проєктуванні своїх багатопотокових додатків.
Попередні Вимоги
Даний курс адресований професіоналам в галузі розробки, які вже мають досвід у програмуванні на Java, але бажають поглибити свої знання в області багатопотоковості та асинхронності. Також курс буде корисний студентам, що послідовно вивчають цю мову програмування і вже опанували її на рівні Java Professional.
Ви навчитеся
- Створювати та запускати потоки.
- Працювати із потокобезпечними колекціями.
- Використовувати ExecutorService та ThreadPool для управління потоками.
- Використовувати Fork/Join Framework для вирішення проблеми з використанням паралельного підходу «розділяй та володарюй».
- Використовувати Future та CompletableFuture для роботи з асинхронними завданнями.
- Ловити та обробляти винятки, отримані при виконанні асинхронного коду.
- Використовувати асинхронність у вебзастосунках на Spring Framework.
- Керувати виконанням завдань, створюючи користувальницький планувальник задач.
- Тестувати асинхронний код за допомогою бібліотеки Awaitility.
- Реалізувати патерни проєктування Producer Consumer та Scatter-Gather.
- 5 год 21 хв
- у записі
- 9 з 12
- українська
Що входить до курсу
Після завершення цього модулю учасники отримають розуміння концепції багатопотокового програмування, ознайомляться з роботою потоків, їх станом та навчаться створювати й використовувати їх. Також будуть ознайомлені з основними ідеями щодо роботи з потоками, як-от м'ютекс, монітор та семафор, та навчаться використовувати ключове слово synchronized, а також семафори для забезпечення одночасного доступу до ресурсів з декількох потоків
Під час цього модулю ви дізнаєтеся про набір колекцій, які оптимальніше та надійніше працюють у багатопотоковому середовищі, ніж стандартні універсальні колекції з пакету java.util. Буде розглянуто реалізацію часто вживаних колекцій. На завершення модулю ви зможете освоїти блокуючі черги, що використовуються для взаємодії з пулами потоків.
На цьому уроці буде розглянуто основи асинхронного програмування з використанням мови Java. У процесі заняття ви ознайомитеся з концепцією асинхронного програмування, визначите різницю між ним та іншими підходами до багатопотокового програмування, і навчитеся створювати та запускати асинхронні завдання.
На цьому занятті буде розглянута робота з групою потоків за допомогою ThreadPool. Ми побудуємо власну реалізацію пула потоків і розглянемо, як керується життєвим циклом потоків за допомогою ExecutorService. В кінці заняття ви пізнаєте особливості такого фреймворку, як Fork/Join, і зрозумієте, навіщо він потрібний, а також навчитеся його використовувати на практиці.
У цьому занятті ми детально розглянемо Future API, звертаючи увагу на нововведення у вигляді класу для роботи з асинхронними завданнями - Experienced Future. Ми вивчимо відмінності між Future та CompletableFuture, а також ознайомимося з деякими інтерфейсами з пакета java.util.function, що широко використовуються в CompletableFuture, і навчимося створювати CompletableFuture.
У цьому уроці ми ретельно вивчимо CompletableFuture, зосередившись на методах runAsync та supplyAsync. Ми проаналізуємо, що означає виняток у контексті асинхронних завдань і як з ними працювати. Крім того, ми ознайомимося з методами exceptionally та handle для обробки виняткових ситуацій.
У цьому уроці буде розглянуто методи thenCombine і thenCompose, які застосовуються для поєднання двох завдань, які можуть бути незалежними або залежними одне від одного відповідно. Крім того, ми детально вивчимо методи allOf і anyOf, які дозволяють об'єднувати більше ніж два завдання, і розглянемо їх практичне використання.
У цьому модулі ми розглянемо аспекти асинхронності у вебдодатках, які побудовані на Spring. Ми докладно проаналізуємо, в яких випадках і для яких завдань слід використовувати анотацію @Async та інтерфейс AsyncConfigurer. Також ми розглянемо відмінності між асинхронним та синхронним виконанням у вебдодатках та опишемо практичні кроки з побудови вебпрограм з використанням асинхронності.
У цьому модулі ми детально ознайомимо вас із ScheduleExecutorService та навчимо, як створювати відкладені завдання з його допомогою. Ми також дослідимо, як використовувати відкладений запуск методів у фреймворку Spring. Ви дізнаєтеся, як кастомізувати стандартний TaskScheduler та як детально контролювати реєстрацію завдань через ScheduledTaskRegistrar та ще ознайомитись з доволі цікавим інтерфейсом SchedulingConfigurer