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
関連項目
ツイート
スポンサーリンク