Java でのスレッド同期: 待機メソッドと通知メソッドの動作原理の分析
Java マルチスレッド プログラミングでは、スレッド間の同期は非常に重要な概念です。実際の開発では、複数のスレッド間の実行順序やリソース アクセスを制御する必要があることがよくあります。スレッドの同期を実現するために、Java には wait メソッドと notification メソッドが用意されています。
wait メソッドと Notice メソッドは、Object クラスの 2 つのメソッドで、Java の監視 (モニター) メカニズムを使用して、スレッド間の調整と通信を実現します。スレッドが特定の条件を待っているとき、オブジェクトの wait メソッドを呼び出すことができ、スレッドは待機状態に入り、オブジェクトのロックを解放します。他のスレッドがオブジェクトの状態を変更すると、オブジェクトの通知メソッドを呼び出して待機中のスレッドに通知することができ、スレッドは再度ロックを競合して実行を継続できるようになります。
待機メソッドと通知メソッドの主な動作原理は次のとおりです。
待機メソッドと通知メソッドの使用を示すサンプル コードを以下に示します。
public class WaitNotifyDemo { private static final Object lock = new Object(); private static boolean flag = false; public static void main(String[] args) { Thread waitThread = new Thread(new WaitTask()); Thread notifyThread = new Thread(new NotifyTask()); waitThread.start(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } notifyThread.start(); } static class WaitTask implements Runnable { @Override public void run() { synchronized (lock) { while (!flag) { try { System.out.println("等待线程进入等待状态"); lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("等待线程被唤醒,继续执行"); } } } static class NotifyTask implements Runnable { @Override public void run() { synchronized (lock) { System.out.println("通知线程唤醒等待线程"); lock.notify(); flag = true; } } } }
上の例では、waitThread が最初に実行を開始し、同期に入ろうとしたときに、 blockでは、flagの初期値がfalseなので、waitメソッドを呼び出して待ち状態になります。その後、notifyThread が開始され、2 秒間スリープした後、ロックを取得し、flag の値を true に設定し、notify メソッドを呼び出して待機中のスレッドを起動します。最終的には、waitThread が起動され、wait メソッドの次の場所から実行が続行されます。
この例を通じて、wait メソッドと notification メソッドがどのように機能するかをよりよく理解できます。これらはスレッド間の同期と通信のための重要なツールであり、スレッド間の競合やリソース アクセスの問題を効果的に解決します。実際のアプリケーションでは、待機メソッドと通知メソッドを適切に使用することで、複数のスレッド間のスムーズな連携を確保できます。
以上がJava の wait と notification を深く理解する: スレッド同期メカニズムの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。