О курсе
Асинхронность - это способ написания программы или ее части так, чтобы последовательное, шаг за шагом, выполнение программных задач не блокировало начало выполнения новых задач. При такой парадигме программа может начать выполнение следующей задачи, пока предыдущая еще выполняется. Это делает программу более эффективной, способной быстро и своевременно реагировать на запросы.
Этот курс позволит вам сформировать необходимую базу знаний и практических навыков для успешной работы с асинхронным кодом.
Курс "Асинхронное программирование в 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