В этом руководстве рассмотрены основы применения асинхронного программирования на Java.Вы когда-нибудь задумывались, как компьютеры справляются с несколькими задачами одновременно, не замедляя свою работу? В этом помогает асинхронное программирование. Благодаря ему компьютер выполняет задачи, не дожидаясь завершения каждой из них, прежде чем начинать следующую. Ранее в Java все задачи выполнялись последовательно, одна за другой. При асинхронном программировании работа больше похожа на одновременное приготовление нескольких блюд.
Асинхронные способы работы в Java
Callbacks и Callback Hell. В Java обратные вызовы (Callbacks) подобны напоминаниям. То есть, вы как бы устанавливаете на кухне таймер, который сообщит вам, когда ваше печенье будет готово. Однако слишком большое количество обратных вызовов может привести к путанице, что приведет к так называемому “аду обратных вызовов” (Callback Hell), когда становится трудно отслеживать, что происходит.
CompletableFuture в Java. Начиная с версии 8 в языке Java представлено расширение под названием CompletableFuture, которое делает асинхронное программирование более управляемым. Оно похоже на помощника, который выполняет различные задачи и сообщает вам, когда каждая из них выполнена. Благодаря ему мы можем избежать путаницы, связанной с Callback Hell.
Использование ExecutorService для асинхронных задач. Представьте ExecutorService как команду поваров. Вы даете им задания (или рецепты), и они работают над ними самостоятельно. Таким образом, вам не придется ждать завершения одной задачи, прежде чем приступить к другой.
Рекомендации и шаблоны в асинхронном программировании
Обрабатывайте ошибки в асинхронном коде. Как и в любом кулинарном проекте, все может пойти не так, как планировалось. Обработка ошибок в асинхронном программировании Java предполагает готовность к неожиданностям, например, наличие резервного плана на случай, если рецепт окажется неверным.
Как избежать появления распространенных ошибок. При приготовлении пищи или кодировании могут случаться ошибки. В асинхронном программировании мы можем избежать распространенных ошибок, делая наш код простым для понимания и обслуживания. Это все равно что содержать кухню в чистоте и порядке. Вот пример:
package Java;
import java.util.concurrent.CompletableFuture;
public class AsyncExp {
static String fetchData(String from){
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
return " Data Comming From :"+from;
}
public static void main(String[] args) {
// Получение данных из двух разных источников
CompletableFuture<String> data1 = CompletableFuture.supplyAsync(()-> fetchData("Wifi 1 5G"));
CompletableFuture<String> data2 = CompletableFuture.supplyAsync(()-> fetchData("Wifi 2 JioFiber"));
CompletableFuture<Void> runAtOneTime = CompletableFuture.allOf(data1, data2);
runAtOneTime.thenRun(()-> {
try {
String dataDevice1 = data1.join(); //
String dataDevice2 = data2.join();
System.out.println("DataDevice1:: "+dataDevice1);
System.out.println("DataDevice2:: "+dataDevice2);
} catch (Exception e) {
e.printStackTrace();
}
});
System.out.println("Completing other tasks till getting data devices ::::::");
try {
Thread.sleep(5000); // ожидание завершения асинхронных задач
} catch (Exception e) {
e.printStackTrace();
}
}
}
Варианты использования асинхронного программирования
Веб-разработка. При создании веб-сайтов или веб-приложений на Java асинхронное программирование помогает обрабатывать несколько запросов одновременно. Это все равно, что обслуживать в ресторане множество клиентов, не заставляя каждого из них долго ждать.
Асинхронные операции ввода-вывода. Операции ввода-вывода включают чтение или запись данных. Асинхронное программирование на Java похоже на возможность читать книгу, ожидая окончания стирки в стиральной машине. То есть, вам не нужно все время смотреть на нее. Работа продолжается без вас.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ