Асинхронні звернення використовуються навіть в одногопоточних середовищах, таких як NodeJS. Майже всі призначені для користувача інтерфейси підтримують асинхронне виконання для утримання UI в активному, реагує на дії пользовате-ля стані.
Проте асинхронне програмування може бути корисним і в інших місцях, крім призначених для користувача інтерфейсів, зазвичай на серверній стороні. Hи J2SE. ні J2ЕЕ не надавали вбудованої «легкої» реалізації для асинхронні-ного програмування.
З появою платформи Jаvа ЇЇ 5 був випущений фрейм-ворк для паралелізму (Concurrency Framework), заснований на JSR166. JSR166 включав безліч утиліт, які робили асинхронне програмування не тільки можливим, але і більш легким і краще керованим. інтерфейс Future
Тим часом Spring представив увазі розробників асинхронні визо-ви методів, що активізуються за допомогою анотацій. Платформа Jаvа ЇЇ НЕ вклю-чала таке зручне рішення аж до версії 6. Анотація @Asynchronous з'явилася з виходом платформи Jаvа ЇЇ 6 і надала зручну можливість реалізації асинхронного виконання методу.
Асинхронне програмування не вказано в чис-ле патернів проектування ні в книзі GoF. ні в «патерни проектування«. Якби воно там присутнє, його опис могло б бути таким: «Забезпечити-кість спосіб виклику методу без блокування викликає методу».
Сама сутність виконання методів полягає в блокуванні зухвало-го аж до завершення виконання викликаного методу. Така поведінка очевидний-но і цілком очікувано, проте не у всіх випадках бажано. Майже всі UI-фрейм-ворк і веб-платформи засновані на неблокірующіх запитах.
Патерн «Асинхронність» заснований на підході «самонаведення». коли операція виконується паралельно або таким чином, при якому не блокується виконан-няющій потік, а результат перевіряється в міру готовності. Зазвичай асинхронний підхід використовує паралельне виконання. Діаграма класів не цілком точно відображає суть такого підходу, краще буде продемонструвати його за допомогою блок-схеми (рис. 1).
Мал. 1. Блок-схема асинхронности