이전 기사에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!