Что такое асинхронное программирование Java

Что такое асинхронное программирование JavaПаттерн программирования «Асинхронность» — особый, хорошо интегрирован­ный случай множественных потоков. Вследствие самой сущности потоков много­ поточные модели нуждаются в системах уведомления и зависят от шаблонного кода для запуска потоков.

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

Тем не менее асинхронное программирование может быть полезным и в других местах, помимо пользовательских интерфейсов, обычно на серверной стороне. Hи J2SE, ни J2ЕЕ не предоставляли встроенной «легкой» реализации для асинхрон­ного программирования.

С появлением платформы Jаvа ЕЕ 5 был выпущен фрейм­ворк для параллелизма (Concurrency Framework), основанный на JSR166. JSR166 включал множество утилит, делавших асинхронное программирование не только возможным, но и более легким и лучше управляемым. Интерфейс Future<T> также предоставил разработчикам способ реализации асинхронного выполнения метода.

Тем временем Spring представил вниманию разработчиков асинхронные вызо­вы методов, активизируемые с помощью аннотаций. Платформа Jаvа ЕЕ не вклю­чала такое удобное решение вплоть до версии 6. Аннотация @Asynchronous появилась с выходом платформы Jаvа ЕЕ 6 и предоставила удобную возможность реализации асинхронного выполнения метода.

Асинхронное программирование не указано в чис­ле паттернов проектирования ни в книге GoF , ни в «Паттернах проектирования«. Если бы оно там присутствовало, его описание могло бы быть таким: «Обеспечи­вает способ вызова метода без блокирования вызывающего метода».

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

Паттерн «Асинхронность» основан на подходе «самонаведения». когда операция выполняется параллельно или таким образом, при котором не блокируется выпол­няющий поток, а результат проверяется по мере готовности. Обычно асинхронный подход использует параллельное выполнение. Диаграмма классов не вполне точно отражает суть такого подхода, лучше будет продемонстрировать его с помощью блок-схемы (рис. 1).

Что такое асинхронное программирование JavaРис. 1. Блок-схема асинхронности