这里先讲述 大道扬帆 里的一个小故事
话说男猪脚扬帆驾驭一叶扁舟在碧海上飘荡。
一只木浆在扬帆手里上下翻飞,惊起了层层涟漪。
“把帆扬起来吧,也省些力气。”夏夏道。
“海风还没到(signal),现在扬帆还早。我现在先眯会,等到(wait)大风起来的时候,才能借风之力遨游九天之上。”

/**
 * wait和notify需要在同步方法或者同步代码块中使用,
 * 否则会报 java.lang.IllegalMonitorStateException
 * @author Administrator
 *
 */
public class 远航 {
	public static void main(String[] args) throws InterruptedException {
		Object 海风将起 = new Object();
		扬帆     猪脚扬帆 = new 扬帆(海风将起);
		海风     外力海风 = new 海风(海风将起);
		猪脚扬帆.start();    // 猪脚先起个线程眯一会。
		外力海风.start();
		/**
		 * 海风迟迟不来,还是让男猪脚卖力划吧
		 */
		// 猪脚扬帆.interrupt();
	}
}


public class 扬帆 extends Thread {
	private Object 海风将起;
	public 扬帆(Object 海风将起) {
		this.海风将起 = 海风将起;
	}
	
	@Override
	public void run() {
		try {
			synchronized (海风将起) {
				海风将起.wait();
			}
			System.err.println("扬帆: 海风来了,终于可以歇会了!");
		} catch (InterruptedException e) {
			e.printStackTrace();
			System.err.println("扬帆: 不用等海风了");
		}
	}
}


public class 海风 extends Thread {
	private Object 海风将起;
	public 海风(Object 海风将起) {
		this.海风将起 = 海风将起;
	}
	
	@Override
	public void run() {
		System.err.println("海风: 还没来,你们再等等吧......");
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		System.err.println("海风: 来了,通知扬帆......");
		synchronized (海风将起) {
			海风将起.notify();	// 海风将起.notifyAll()通知扬帆和夏夏;
		}
		
	}
}