Що таке асинхронне програмування 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).

Мал Мал. 1. Блок-схема асинхронности