>  기사  >  Java  >  자바 비동기

자바 비동기

WBOY
WBOY원래의
2024-08-30 15:09:53861검색

Java 프로그래밍 언어에서 async는 프로그램을 차단하지 않고 프로그램을 실행해야 할 때 일반적으로 선언되는 다른 함수에서 정의되거나 다른 함수에서 인수로 전달될 수 있는 호출 또는 함수로 정의되며 이는 다음과 같습니다. 호출이 이벤트에서 반환되고 콜백 함수로 반환되면 완료됩니다. Java에서는 새로 생성된 스레드 내에서 호출되는 콜백 메서드로 정의됩니다. 그래서 일반적으로 스레드 실행 완료나 실패 등의 성능 진행 상황을 메인 스레드에 통보하여 별도의 스레드에서 실행되는 프로그램인 논블로킹 코드를 작성하는 것에 불과한 비동기 프로그래밍이 일반적입니다.

Java에서 비동기 작업

이 글에서는 자바에서 비동기 함수라고 알려진 콜백 메소드에 대해 설명하겠습니다. 이 함수는 Java에서는 Wait라고도 합니다. Java에서는 자체적으로 비동기화하여 새 스레드를 시작하여 비동기 프로그래밍을 만들거나 작성합니다. 비동기 콜백은 작업이 서로 종속되지 않아 실행하는 데 시간이 걸릴 수 있는 경우에만 사용됩니다. 따라서 일반적으로 비동기 호출은 온라인 쇼핑의 예를 들어 설명할 수 있습니다. 여기서 일부 항목을 선택하고 장바구니에 추가하면 해당 항목은 다른 사람이 사용할 수 없는 곳에서도 다른 사람도 사용할 수 있으므로 차단되지 않습니다. 항목 주문이 완료될 때까지 기다릴 필요가 없습니다. 따라서 실행을 차단하지 않고 실행할 수 있는 프로그램을 실행하고 싶을 때마다 비동기 프로그래밍을 사용하여 수행됩니다.

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

Java에는 코드를 비동기적으로 실행하기 위해 비동기 프로그래밍이 필요한 논블로킹 코드에 대한 수요가 많기 때문에 스레드, 퓨처, 스트림 사용 등 논블로킹 코드 작성을 위한 많은 기능이 있습니다. . 이제 jcabi Aspect, Cactoos, Guava, CompleteableFutures, FutureTask, EA Async 등과 같은 비동기 프로그래밍을 달성하는 방법에 대한 몇 가지 방법을 논의해 보겠습니다.

1. 완료 가능한 미래

샘플 예: 다음 구문에 따라 인수 없는 생성자를 사용하여 CompleteableFuture를 생성하려면:

CompleteableFuture <String> completeableFuture = new CompleteableFuture <String>();
결과를 얻으려면 get() 메소드를 사용해야 합니다. 그래서 다음과 같이 쓸 수 있습니다.

문자열 결과 = CompleteableFuture.get()  여기서 gets() 메서드는 Future가 완료될 때까지 차단되지만 Future가 완료되지 않으므로 이 호출은 영원히 차단합니다. 그래서 아래 메소드를 호출하여 수동으로 완료해야 합니다.

completeableFuture.complete("Result")
따라서 클라이언트는 후속 호출을 무시하고 지정된 결과를 얻습니다. 프로그램은 아래와 같습니다.

CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
while (!completableFuture.isDone()) {
System.out.println("CompletableFuture is not finished yet...");
}
long result = completableFuture.get();
2. EA 비동기

이것은 비동기 코드를 순차적으로 작성하는 Java의 또 다른 기능으로, 자연스럽게 쉬운 프로그래밍과 확장을 제공합니다. ea-async 라이브러리를 통해 자바 생태계에 부여되는 async-await 기능을 갖게 된 Electronic Arts입니다. 이 기능은 런타임 코드를 변환하고 completableFuture와 유사하게 작동하는 메서드 호출을 다시 작성합니다. 따라서 비동기 런타임 초기화를 위해 Async.init 메서드를 호출하여 Wait 메서드로 알려진 EA-sync 메서드를 사용하여 위의 CompleteableFuture 코드를 구현할 수 있습니다.

CompleteableFuture와 EA sync를 모두 사용하여 숫자 계승의 예를 살펴보겠습니다.

CompletableFuture <Double> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
while (!completableFuture.isDone()) {
System.out.println("The completeableFuture is not completed...");
}
double res = completableFuture.get();
따라서 위 코드는 위 코드에 대한 wait 메서드를 사용하여 EA 동기화 기능에서 사용할 수 있습니다. get() 메서드 대신 wait() 메서드를 사용하므로 위 코드는 마지막 줄만 업데이트할 수 있으며 정적 블록에서 Async의 init 메서드로 초기화해야 하며 나머지 코드는 동일하게 유지됩니다.

static { Async.init(); }
public func_name(){….. same as above code of completeableFuture…
double res Async.await(completableFuture);

From the above sample code, which is transformed code of completeableFuture code by using static block also for initializing the Async runtime so that the Async can transform the code of completeableFuture code during runtime and then to the await method, it can rewrite the calls which will now EA async will behave similarly to that of using the chain of completeableFuture or Future.join method. So now, when once the asynchronous execution of any method is completed, then the result from the Future method is passed to another method where the method is having the last execution using the CompleteableFuture.runAsync method.

In Java, as discussed above, there are many different ways for writing the asynchronous programming using various other methods.

Conclusion

In this article, we discussed java async where it is defined as a callback method that will continue the execution of the program without blocking by returning the calls to the callback function. This article saw how asynchronous programming is written in java using different features such as CompleteableFutures, EA async, Future Task, Guava, etc. In this article, we have seen two among these features for making the callback functions asynchronous by using various methods provided by the given respective features.

위 내용은 자바 비동기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java 목록 반복자다음 기사:Java 목록 반복자