> Java > java지도 시간 > 본문

Java Future로 더 빠른 비동기 프로그래밍 잠금 해제

DDD
풀어 주다: 2024-09-20 08:19:39
원래의
300명이 탐색했습니다.

Unlock Faster Async Programming with Java Futures

이전 기사에서는 ListenableFuture의 세계를 탐험했습니다. 이제 특히 변환과 연결에 초점을 맞춘 고급 기술에 대해 더 자세히 살펴보겠습니다. 비동기 서비스에서 얻은 ListenableFuture가 있다고 상상해 보세요. 또한 간단한 방법도 있습니다:

Document parse(String xml) {//...
로그인 후 복사

문자열 자체로 작업하는 대신 문서가 필요합니다. 한 가지 접근 방식은 Future를 해결하고 문자열을 처리하는 것입니다. 그러나 더 우아한 해결책은 결과를 사용할 수 있게 되면 변환을 적용하여 메서드가 항상 ListenableFuture를 반환한 것처럼 동작하도록 만드는 것입니다. 이는 매우 간단합니다.

final ListenableFuture future = //...
 
final ListenableFuture documentFuture = Futures.transform(future, new Function() {
    @override    public Document apply(String contents) {
        return parse(contents);
    }
});
로그인 후 복사

또는 더 나은 가독성을 위해:

final Function parseFun = new Function() {
    @override    public Document apply(String contents) {
        return parse(contents);
    }
};
 
final ListenableFuture future = //...
 
final ListenableFuture documentFuture = Futures.transform(future, parseFun);
로그인 후 복사

Java 구문에는 한계가 있을 수 있지만 우리가 달성한 것에 초점을 맞춰 보겠습니다. Futures.transform()은 기본 ListenableFuture가 구문 분석() 변환을 적용할 때까지 기다리지 않습니다. 대신, 주어진 future가 완료될 때마다 알림을 받을 준비가 된 콜백을 등록합니다. 이 변환은 적절한 순간에 동적으로 투명하게 적용됩니다. 여전히 Future가 있지만 이번에는 Document를 래핑합니다.

이제 한 단계 더 나아가 보겠습니다. 또한 특정 문서의 관련성(이 문맥에서 의미하는 바가 무엇이든)을 계산하는 비동기식, 장기 실행 방법도 있습니다.

ListenableFuture calculateRelevance(Document pageContents) {//...
로그인 후 복사

우리가 이미 보유하고 있는 ListenableFuture와 어떻게든 연결할 수 있나요? 첫 번째 시도:

final Function> relevanceFun = new Function>() {
    @override    public ListenableFuture apply(Document input) {
        return calculateRelevance(input);
    }
};
 
final ListenableFuture future = //...
final ListenableFuture documentFuture = Futures.transform(future, parseFun);
final ListenableFuture> relevanceFuture = Futures.transform(documentFuture, relevanceFun);
로그인 후 복사

향상된 비동기 프로그래밍 가능성에 대한 자세한 내용을 보려면 이 링크를 방문하세요.

위 내용은 Java Future로 더 빠른 비동기 프로그래밍 잠금 해제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!