Java에서 비동기식으로 메서드 호출
-
Thread
를 사용하여 Java에서 비동기식으로 메서드 호출 -
FutureTask
를 사용하여 Java에서 비동기식으로 메서드 호출 -
CompletableFuture
를 사용하여 Java에서 비동기식으로 메서드 호출 -
EA Async
를 사용하여 Java에서 비동기식으로 메서드 호출 - Cactuos 라이브러리를 사용하여 Java에서 비동기식으로 메서드 호출
이 기사에서는 Java에서 비동기식으로 함수를 호출하는 방법을 배웁니다.
시작하기 위해 FutureTask 및 CompletableFuture와 같은 Java의 내장 비동기 프로그래밍 도구 중 일부를 살펴보겠습니다. 그런 다음 EA Async 및 Cactuos와 같은 즉시 사용 가능한 솔루션을 제공하는 일부 라이브러리를 살펴보겠습니다.
Thread
를 사용하여 Java에서 비동기식으로 메서드 호출
비동기 작업을 수행하기 위해 새 스레드를 시작할 수 있습니다. 더 이해하기 쉽습니다.
두 개의 정수를 더하고 결과를 출력하는 새 스레드를 만들어 보겠습니다.
class example {
public static void main(String[] args) {
int num1 = 4;
int num2 = 5;
int result = num1 + num2;
Thread T = new Thread(
() -> { System.out.println("Addition of " + num1 + " and " + num2 + " is " + result); });
T.start();
}
}
FutureTask
를 사용하여 Java에서 비동기식으로 메서드 호출
Future 인터페이스를 사용하면 FutureTask
를 사용하여 비동기 작업을 수행할 수 있습니다. ExecutorService
의 submit 메소드를 사용하여 프로젝트를 비동기적으로 실행하고 FutureTask
개체를 반환할 수 있습니다.
예를 들어 다음은 숫자의 계승을 찾는 방법입니다.
int num1 = 9;
ExecutorService tp = Executors.newCachedThreadPool();
Future<double> futureTask = tp.submit(() -> factorial(num1));
while (!futureTask.isDone()) {
System.out.println("Still processing the task");
}
double result = futureTask.get();
tp.shutdown();
작업이 완료되었는지 확인하기 위해 Future 인터페이스의 isDone
기능을 활용했습니다. 그런 다음 get
메서드를 사용하여 결과를 얻었습니다.
CompletableFuture
를 사용하여 Java에서 비동기식으로 메서드 호출
Future
와 CompletionStage
의 하이브리드인 CompletableFuture
는 Java 8에 도입되었습니다. supplyAsync
, runAsync
, thenApplyAsync
와 같은 비동기 프로그래밍 기술이 있습니다.
CompletionStage
는 약속입니다. 계산이 어느 시점에서 완료될 것임을 보장합니다.
CompletionStage
는 스테이지가 완료될 때 실행할 콜백을 첨부하는 여러 메서드를 제공하기 때문에 유용합니다.
처음부터 시작하여 간단한 비동기 계산을 만들어 보겠습니다.
CompletableFuture
와 함께 supplyAsync
를 사용하여 Java에서 비동기식으로 메서드 호출
CompletableFuture.supplyAsync(this::sendMsg);
그렇게 간단하게 supplyAsync
함수는 비동기 코드가 포함된 공급자를 수락합니다. 이 예에서 sendMsg
기능을 사용하려고 합니다.
CompletableFuture
와 함께 thenAccept
를 사용하여 Java에서 비동기식으로 메서드 호출
CompletableFuture.supplyAsync(this::sendMsg).thenAccept(this::notify);
첫 번째 예에서는 sendMsg
를 실행하여 메시지를 비동기식으로 보냅니다. 메시지의 배달 상태를 알려주는 콜백을 추가해 보겠습니다.
콜백은 여러 가지 방법으로 도입될 수 있습니다. 한 가지 방법은 thenAccept
를 사용하는 것입니다. 이 예에서 사용자는 이전 계산의 결과를 완료한 후 처리하도록 알림을 받아야 합니다.
EA Async
를 사용하여 Java에서 비동기식으로 메서드 호출
다음은 비동기 코드를 단계적으로 작성하여 프로그래밍과 확장을 훨씬 쉽게 만드는 Java의 또 다른 기능입니다. Electronic Arts는 ea-async 패키지를 통해 Java 환경에서 사용할 수 있는 async-await 기능의 작성자입니다.
이 기능은 런타임 코드를 변환하고 completeableFuture
에 필적하는 await 메서드 호출을 다시 작성합니다.
따라서 우리는 Async.init
함수를 호출하여 Async
런타임을 초기화함으로써 위의 completeableFuture
코드를 구현하기 위해 await 메소드로 알려진 EA-sync
메소드를 사용할 수 있습니다.
여기에서 EA의 Async
클래스가 제공하는 await 함수를 사용하여 이전에 설명된 CompletableFuture
코드를 수정합니다.
static {
Async.init();
}
Async
런타임 분석을 설정하기 위해 Async.init
함수를 정적으로 사용합니다.
public double example2(int num1) {
CompletableFuture<double> cf = CompletableFuture.supplyAsync(() -> factorial(num1));
double result = Async.await(cf);
}
런타임 시 async
함수는 CompletableFuture
체인을 사용하여 유사하게 작동하도록 코드를 변경하고 await
메서드 호출을 다시 작성합니다.
Cactuos 라이브러리를 사용하여 Java에서 비동기식으로 메서드 호출
비동기 작업의 경우 이 라이브러리는 Async
클래스를 제공합니다. Cactus 라이브러리에는 텍스트 조작에서 데이터 구조에 이르기까지 광범위한 레퍼토리가 있습니다.
이 라이브러리의 기본 유형 및 기능은 객체 지향 설계 개념에 더 중점을 두고 있지만 Guava 및 Apache Commons와 같은 다른 라이브러리에서 제공하는 것과 유사합니다.
여기에서 Cactoos의 Async
클래스의 인스턴스를 사용하여 숫자의 계승을 찾습니다.
Async<Integer, Double> a = new Async<Integer, Double>(inputdata -> factorial(inputdata));
Future<Double> asyncFuture = a.apply(num1);
Double result = asyncFuture.get();
apply
함수는 ExecutorService.submit
메서드를 사용하여 Future 인터페이스 개체를 작동하고 반환합니다. Cactuos 라이브러리는 Apache Commons 라이브러리에 있는 정적 메소드와 동일한 기능을 수행하는 클래스를 제공합니다.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn