三个线程输出一段内容后通过wait()进入阻塞状态,随后通过调用所对象obj的notify()方法,使其中随机的一个线程唤醒,再通过notifyAll()使剩余的两个线程唤醒。public class WaitNotifyTest { public static void main(String[] args) { TestThread testThread1 = new TestThread(); TestThread testThread2 = new TestThread(); TestThread testThread3 = new TestThread(); testThread1.start(); testThread2.start(); testThread3.start(); try { Thread.sleep(1000 * 5); } catch (InterruptedException e) { System.out.println("Main Thread Interrupted"); } System.out.println("Resume By Notify"); testThread1.resumeByNotify(); try { Thread.sleep(1000 * 5); } catch (InterruptedException e) { System.out.println("Main Thread Interrupted"); } System.out.println("Resume By NotifyAll"); testThread1.resumeByNotifyAll(); } } class TestThread extends Thread { private static Object obj = new Object(); @Override public void run() { System.out.println(getName() + " Before Wait"); synchronized (obj) { try { obj.wait(); } catch (InterruptedException e) { System.out.println(getName() + " Test Thread Interrupted"); } } System.out.println(getName() + " After Wait"); } public void resumeByNotify() { synchronized (obj) { obj.notify(); } } public void resumeByNotifyAll() { synchronized (obj) { obj.notifyAll(); } } }
Thread-0 Before Wait Thread-1 Before Wait Thread-2 Before Wait Resume By Notify Thread-0 After Wait Resume By NotifyAll Thread-2 After Wait Thread-1 After Wait