Java でのスレッド出力の待機: 同期のジレンマ
マルチスレッド Java アプリケーションでは、複数のスレッドの実行を調整することが重要です。データの整合性とアプリケーションの応答性。あるスレッドが別のスレッドの出力に依存する場合、同期メカニズムが機能します。このようなシナリオの 1 つが、次の質問で説明されています。
質問:
Java スレッド (以下、「アプリ スレッド」と呼びます) を待機させるにはどうすればよいですか?別のスレッド (「db スレッド」) が操作を完了し、出力を提供する準備ができるまで? db スレッドはアプリケーションの存続期間中アクティブなままでなければならず、両方のスレッドが同時に実行される必要があります。 DB スレッドの準備ができるまでアプリ スレッドをブロックすることは許容できる解決策です。
答え:
この同期の問題を解決する鍵は、CountDownLatch を使用することにあります。 CountDownLatch は、複数のスレッドが特定のカウントに達するまで待機してから続行できるようにする同期構造です。この場合:
// Create a CountDownLatch with a counter of 1 CountDownLatch latch = new CountDownLatch(1);
待機が必要なアプリ スレッド内:
// The app thread waits for the db thread to complete latch.await();
操作が完了して出力の準備ができたら、データベース スレッド内:
// The db thread signals the app thread to proceed latch.countDown();
このメカニズムにより、データベース スレッドの操作が完了するまでアプリ スレッドは続行されなくなります。アプリ スレッドは、CountDownLatch のカウントがゼロに達するまで待機し、データベース スレッドの準備が完了すると、両方のスレッドが同時に実行できるようになります。このアプローチは、スレッドの実行とデータの整合性の両方を維持しながら、スレッド同期に対するクリーンで効率的なソリューションを提供します。
以上がJava スレッドを別のスレッドからの出力を待機させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。