Javaで複数のスレッドを同時に実行する方法は? ExecutorServiceアプローチ

公開: 2021-10-09
Javaで複数のスレッドを同時に実行する方法は? ExecutorServiceアプローチ

この例をもう一度見てみましょう。JavaでHTTPエンドポイントのPingステータスを取得するにはどうすればよいですか。

その例のスレッド実行に気づきましたか? シーケンシャルです。 What if you have 500 endpoints? 結果を得るには、少なくとも5分待つ必要があるに違いありません。 これは最善の解決策ではないと確信しています。

それで? 正しい質問は次のとおりです。

  • 複数のスレッドを同時に実行する方法は?
  • Javaで複数のスレッドを実装する方法は?
  • Javaでさまざまなスレッドを実行するにはどうすればよいですか?
  • Java –マルチスレッドプログラミングチュートリアルはどこにありますか?
  • スレッド:複数のスレッドを使用して処理を高速化するにはどうすればよいですか?

ExecutorService Approachがあなたの答えです。

終了を管理するメソッドと、1つ以上の非同期タスクの進行状況を追跡するためのFutureを生成できるメソッドを提供するエグゼキューター。

ExecutorServiceをシャットダウンすると、新しいタスクが拒否される可能性があります。 ExecutorServiceをシャットダウンするための2つの異なるメソッドが提供されています。 shutdown()メソッドは、以前に送信されたタスクを終了する前に実行できるようにしますが、 shutdownNow()メソッドは、待機中のタスクの開始を防ぎ、現在実行中のタスクを停止しようとします。

終了時に、エグゼキュータにはアクティブに実行されているタスクがなく、実行を待機しているタスクもありません。また、新しいタスクを送信することもできません。 未使用のExecutorServiceは、そのリソースを再利用できるようにシャットダウンする必要があります。

メソッドsubmitは、実行のキャンセルや完了の待機に使用できるFutureを作成して返すことにより、基本メソッドExecutor.executejava.lang.Runnable )を拡張します。 メソッドinvokeAnyおよびinvokeAllは、最も一般的に役立つ形式の一括実行を実行し、タスクのコレクションを実行してから、少なくとも1つまたはすべてが完了するのを待ちます。 (Class ExecutorCompletionServiceを使用して、これらのメソッドのカスタマイズされたバリアントを作成できます。)

Executorsクラスは、このパッケージで提供されるexecutorサービスのファクトリメソッドを提供します。

  • java – ExecutorService、すべてのタスクが終了するのを待つ方法は?
  • JavaExecutorServiceのガイド
  • Javaスレッドプール–ExecutorServiceの説明

以下は、 usage of ExecutorServiceを説明する簡単なJavaの例です。

出力:

次に、結果をチェックアウトします。

ほんの数秒で完了します。 これがお役に立てば幸いです。 これを複数回実行してみてください。すべてのスレッドが並行して実行されているため、異なる結果が表示される場合があります。結果が速い場合は、Eclipseコンソールに結果が投稿されます。

ご不明な点がございましたら、お気軽にお問い合わせください。