ホームページ  >  記事  >  Java  >  Java Futures でより高速な非同期プログラミングを実現

Java Futures でより高速な非同期プログラミングを実現

DDD
DDDオリジナル
2024-09-20 08:19:39436ブラウズ

Unlock Faster Async Programming with Java Futures

前回の記事では、ListenableFuture の世界について説明しました。ここで、特に変換とチェーンに焦点を当てて、より高度なテクニックを詳しく見てみましょう。非同期サービスから取得した ListenableFuture があると想像してください。さらに、次のような簡単な方法もあります。

Document parse(String xml) {//...

文字列自体を操作する代わりに、ドキュメントが必要です。 1 つのアプローチは、Future を解決して String を処理することです。ただし、より洗練された解決策は、結果が利用可能になったら変換を適用し、メソッドが常に 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 が parse() 変換を適用するのを待ちません。代わりに、コールバックを登録し、指定されたフューチャーが完了するたびに通知を受け取ることができるようにします。この変換は、適切なタイミングで動的かつ透過的に適用されます。まだ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 Futures でより高速な非同期プログラミングを実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。