Java 非同期

WBOY
リリース: 2024-08-30 15:09:53
オリジナル
892 人が閲覧しました

Java プログラミング言語では、非同期は、別の関数で定義したり、別の関数の引数として渡すことができる呼び出しまたは関数として定義されます。通常、プログラムをブロックせずにプログラムを実行する必要がある場合に宣言されます。呼び出しがイベントから戻り、コールバック関数に戻るときに実行されます。 Java では、これは新しく作成されたスレッド内で呼び出されるコールバック メソッドとして定義されます。したがって、一般に非同期プログラミングとは、スレッドの実行完了または失敗のパフォーマンスの進行状況をメインスレッドに通知することによって、別のスレッドで実行されるプログラムであるノンブロッキング コードを記述することに他なりません。

Java での非同期の仕組み

この記事では、Java の async 関数として知られるコールバック メソッドについて説明します。この関数は Java では await とも呼ばれます。 Java において、スレッド自体を非同期にして新しいスレッドを開始することにより、非同期プログラミングを作成または作成すること。非同期コールバックは、タスクが相互に依存していない場合にのみ使用され、実行に時間がかかる可能性があります。したがって、一般に、非同期呼び出しは、オンライン ショッピングの例で説明できます。オンライン ショッピングでは、ある商品を選択してカートに追加すると、その商品はブロックされず、他の人も利用できるようになります。商品の注文が完了するまで待つ必要はありません。したがって、実行をブロックせずに実行できるプログラムを実行したいときは、非同期プログラミングを使用して実行します。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java には、コードを非同期的に実行するために非同期プログラミングが必要なノンブロッキング コードに対する需要が多いため、スレッド、フューチャー、ストリームなどの使用など、ノンブロッキング コードを記述するための機能が多数あります。 。そこで、jcabi アスペクト、cactoos、guava、completeableFutures、FutureTask、EA Async などの非同期プログラミングを実現する方法についていくつか説明します。

1. completeableFutures

completeableFutures は、completeableFutures として知られる JavaScript Promise の Java バージョンで、Future や CompletionStage などの 2 つのインターフェイスを実装できます。これら 2 つのインターフェイスを組み合わせることで、非同期プログラミングを作成または操作するためのこの機能が完成します。この機能は、supplyAsync、runAsync などの多くのメソッドを提供します。supplyAsync メソッドは、結果に対して何かを行うときに使用されるため、これらのメソッドはコードの非同期部分を開始するために使用されます。何も望まない場合は、次のメソッドを使用できます。 runAsync メソッド。 completeableFutures には、複数の completeableFuture を 1 つずつ使用する場合や単純にネストされた completeableFuture を使用する場合や、2 つの completeableFuture の結果を結合する場合に単純に使用する場合など、thenCompose などの別のメソッドがあります。その場合は、thenCombine メソッドという名前のメソッドがあります。したがって、これらすべてのメソッドは完了可能なフューチャーで処理され、完了可能なフューチャーにはこれらすべてのメソッドを保持する完了ステージのメソッドが含まれます。

サンプル例: 次の構文で引数なしのコンストラクターを使用して completeableFuture を作成するには:

CompleteableFuture <String> completeableFuture = new CompleteableFuture <String>();
ログイン後にコピー

結果を取得するには、get() メソッドを使用する必要があります。したがって、

のように書くことができます。

String result = 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 のもう 1 つの機能であり、自然にプログラミングと拡張性が容易になります。これは、この ea-async ライブラリを通じて Java エコシステムに与えられる async-await 機能を取得したエレクトロニック アーツです。この機能はランタイム コードを変換し、completableFuture と同様に動作する await メソッドの呼び出しを書き換えます。したがって、await メソッドとして知られる EA-sync メソッドを使用して、Async.init メソッドを呼び出して Async ランタイムを初期化することで、上記の 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();
ログイン後にコピー

そのため、上記のコードの await メソッドを使用して、上記のコードを EA 同期機能で使用できます。 get() メソッドの代わりに await() メソッドを使用するため、上記のコードは最後の行のみで更新でき、静的ブロック内の 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.

以上がJava 非同期の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート