ホームページ  >  記事  >  Java  >  Java での非同期プログラミングの実践の詳細な説明

Java での非同期プログラミングの実践の詳細な説明

黄舟
黄舟オリジナル
2017-05-28 09:13:541415ブラウズ

非同期プログラミングは、ノンブロッキングのイベント駆動型のプログラミングモデルを提供します。この記事では Java 非同期プログラミングの実践方法を紹介しますので、興味のある方はぜひ一緒に見てください

非同期とは何ですか?なぜそれを使うのでしょうか? 非同期プログラミングは、ノンブロッキングのイベント駆動型プログラミング モデルを提供します。 このプログラミング モデルでは、システム内の複数のコアを利用してタスクを実行し、並列処理を実現し、それによってアプリケーションのスループットを実現します。ここでのスループット率とは、単位時間あたりに実行されるタスクの数を指します。 このプログラミング スタイルでは、作業単位はメイン アプリケーション スレッドとは独立して実行され、呼び出し元のスレッドにそのステータス (成功、処理中、または失敗) を通知します。

ブロッキングモデルを排除するには非同期が必要です。実際、非同期プログラミング モデルは同じスレッドを使用して複数のリクエストを処理でき、これらのリクエストがこのスレッドをブロックすることはありません。アプリケーションがスレッドを使用してタスクを実行し、タスクが完了するのを待ってから次のステップに進むと想像してください。ロギング フレームワークはその良い例です。通常、例外やエラーをファイル、データベース、またはその他の同様の場所などのターゲットに記録する必要があります。プログラムを実行する前にログが書き込まれるのを待つ必要はありません。そうしないと、プログラムの応答が影響を受けます。 対照的に、ログ フレームワークへの呼び出しが非同期で行われる場合、アプリケーションは待機することなく他のタスクを同時に実行できます。これはノンブロッキング実行の例です。

Java で非同期を実装するには、java.util.concurrent パッケージの下にある Future と FutureTask を使用する必要があります。Future はインターフェイスであり、FutureTask はその実装クラスです。実際、コードで Future を使用すると、非同期タスクがすぐに実行され、呼び出し元のスレッドは結果の Promise を取得できます。

以下のコード スニペットは、2 つのメソッドを持つインターフェイスを定義します。 1 つは同期メソッド、もう 1 つは非同期メソッドです。

 import java.util.concurrent.Future;
public interface IDataManager {
  // synchronous method
  public String getDataSynchronously();
  // asynchronous method
  public Future<String> getDataAsynchronously();
}

コールバック モデルの欠点は、コールバックが入れ子になっている場合に面倒なことであることに注意してください。

すべきこととしてはいけないこと テストを容易にするために、コード内の複数のスレッドから機能を分離する必要があります。 Java で非同期コードを作成する場合は、呼び出し元のスレッドがブロックされないように、非同期モデルに従う必要があります。

Constructor

は非同期にすることはできません。コンストラクター内で非同期メソッドを呼び出さないでください。非同期メソッドは、タスクが相互に依存していない場合に特に便利です。呼び出し元のタスクが呼び出されたタスクに依存している場合は、非同期を使用しないでください (翻訳者注: 呼び出し元のスレッドがビジネスでブロックされるため、これは非同期では意味がありません) 非同期メソッドで例外を処理する必要があります。タスク実装の例外。 長時間実行されるタスクは、非同期実行メソッドに対してスレッド コンテキストの切り替えやスレッド状態の保存などを実行する必要があるため、同期実行よりも時間がかかる場合があります。非同期例外とは異なります。 同期例外のヒント: プログラムが特殊な状態になるまで実行されるたびに例外がスローされます。非同期例外の追跡は非常に困難です。したがって、同期例外と非同期例外は、例外を発生させる可能性のあるプログラム内の同期コードまたは非同期コードを意味します。

概要

非同期は、大規模で応答性の高いアプリケーションを設計するために重要です。非同期コールバック モデルには多くの利点があり、プロセッサが他のタスクを実行している間に、非同期コールバック メソッドを利用して負荷の高い I/O 操作を実行できます。ただし、非同期サポートは Java と C# で提供されていますが、非同期プログラミングの実装は必ずしも簡単ではありません。非同期メソッドの使用には注意が必要です。非同期メソッドをいつ使用するか、いつ使用しないかを理解しておく必要があります。 この記事では、非同期プログラミングの概念と、Java プログラミングを使用してそれを実装する方法を紹介します。この記事では、非同期プログラミングを使用するためのベスト プラクティスも示します。読んでくれてありがとう。

Java 7 は、Fork/Join フレームワークを提供します。これは、大きなタスクを、並列実行できる多数の小さなタスクに分割できます。 Java 8 では、par

all

elStream は内部で Fork/Join を使用して同時操作を実行します。

Node.js は当然非同期プログラミング モードをサポートしており、golang などの他の言語でもゴルーチンやチャネルを使用して非同期プログラミングを実装することも簡単です。

以上がJava での非同期プログラミングの実践の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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