Java でのスレッド実行の調整
マルチスレッド アプリケーションでは、多くの場合、複数のスレッド間でタスクの完了を同期することが必要になります。これは、あるスレッドの実行結果が別のスレッドの完了に依存する場合に特に当てはまります。これに関連して、Java プログラム内のすべてのスレッドがいつ作業を終了したかを判断する方法を見てみましょう。
問題ステートメント:
同時に 5 つのスレッドを持つアプリケーションがあります。 Web からデータを取得し、共有バッファ クラスの 5 つの異なるフィールドにデータを設定します。目標は、すべてのスレッドがタスクを完了した後でバッファー データを検証し、データベースに保存することです。主な課題は、すべてのスレッドの実行が終了した瞬間を特定することです。
解決策:
スレッド プールを管理する効果的なアプローチの 1 つは、ExecutorService を使用することです。これにより、スレッドを作成および管理する便利な方法が提供されます。このソリューションを実装する方法は次のとおりです。
ExecutorService es = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { es.execute(new Runnable() { /* Implement your task */ }); } es.shutdown(); boolean finished = es.awaitTermination(1, TimeUnit.MINUTES); // All tasks have finished or the time has been reached.
このコード スニペットでは、まず Executors.newCachedThreadPool() メソッドを使用して ExecutorService を作成します。これにより、送信されたタスクの数に基づいてサイズを動的に調整するスレッド プールが作成されます。次に、execute() メソッドを使用して 5 つのタスクを executor サービスに送信します。
すべてのタスクが送信されたら、shutdown() メソッドを呼び出して、それ以上タスクが executor サービスに送信されないことを示します。その後、指定されたタイムアウト (この場合は 1 分) で awaitTermination() メソッドを呼び出します。このメソッドは、すべてのタスクが終了するかタイムアウトに達するまで、現在のスレッドをブロックします。
タイムアウト前にすべてのタスクが完了した場合、finished 変数は true に設定され、それ以外の場合は false に設定されます。その後、finished の値に基づいて必要な検証とデータベース ストレージ操作を実行できます。
ExecutorService と awaitTermination() メソッドを利用することで、Java プログラム内のすべてのスレッドが作業を完了するまで効果的に待つことができます。その後、アプリケーションの後続の手順に進みます。
以上がJava マルチスレッド アプリケーションで続行する前にすべてのスレッドが確実に終了するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。