Java スレッドの同期 wait notify notifyAll

提供: Java入門
移動: 案内検索
スポンサーリンク

Javaのスレッドには、同期のためのAPIとしてwait, notify, notifyAll が提供されています。

読み方

wait
うぇいと
notify
のーてぃふぁい
notifyAll
のーてぃふぁいおーる

概要

wait
スレッドを待機中にします。 synchronized 内では、ロックも解放します。
notify
waitメソッドで待機中のスレッドの1つが再開されます。プログラムで任意のスレッドを指定できません。
notifyAll
waitメソッドによる待機中スレッドをすべて実行状態にします。

wait_test1

ソースコード wait_test1.java

/*
 * wait_test1.java
 * Copyright (C) 2015 kaoru <kaoru@localhost>
 */
 
class X extends Thread {
        @Override
        synchronized public void run() {
                super.run();
                System.out.println("    start thread");
                try {
                        wait();
                        System.out.println("    wait done");
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                System.out.println("    end thread");
        }
}
public class wait_test1
{
        public static void main(String[] args) {
                Thread t = new X();
                t.start();
                try {
                        System.out.println("sleep start");
                        Thread.sleep(1000);
                        System.out.println("sleep end");
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                synchronized(t) {
                        System.out.println("notify");
                        t.notifyAll();
                }
                try {
                        System.out.println("join start");
                        t.join();
                        System.out.println("join end");
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                System.out.println("end main");
        }
}

コンパイル

javac wait_test1.java

実行例

$ java wait_test1
sleep start
        start thread
sleep end
notify
join start
        wait done
        end thread
join end
end main

関連項目




スポンサーリンク