转载于 : http://www.verejava.com/?id=16992949250274

package com.wait.notify;

/**
 题目: 人们在火车站的售票窗口排队买火车票
	1. 北京西站开门
	2. 打开售票窗口
	3. 北京西站有10张去长沙的票
	4. 打开2个售票窗口, 
	5 假设每个售票窗口每隔1秒钟买完一张票
	
	1. 根据 名词  找类
	人们(Person), 火车站(Station),火车票(Ticket) , 售票窗口e 是火车站的线程
	
	
 */
import java.util.*;

public class TestTrain {
	
	public static void main(String[] args) {
		//火车西站开门
		Station station = new Station("火车西站");

		//开窗口
		Thread win1 = station.openWindow("普通窗口");
		Thread win2 = station.openWindow("学生窗口");

		//窗口1 开始售票
		//设置线程优先级 setPriority()
		//win2.setPriority(Thread.MAX_PRIORITY);

		win1.start();
		win2.start();
	}
}

class Station implements Runnable {
	private String name;//火车站的名称
	private String[] persons = { "赵海洋", "王锐", "宋沙", "李欣伟", "徐文晓", "孟令强", "王大卫", "李宝琴", "王浩" };// 火车站排队 买票的人
	private int i = -1;

	public Station(String name) {
		super();
		this.name = name;

	}

	//打开售票窗口  学生窗口,普通窗口,军人窗口  
	//售票窗口 是线程 Thread
	public Thread openWindow(String name) {
		return new Thread(this, name);
	}

	//火车站售票
	public synchronized void sale() {
		try {
			while (i < persons.length - 1) {
				i++;
				String person = persons[i];
				if ("宋沙".equals(person)) {
					this.wait();
				}
				if ("徐文晓".equals(person)) {
					this.notify();
				}

				System.out.println(person + " " + Thread.currentThread().getName() + "  买了一张北京到上海的火车票");

				Thread.sleep(2000);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void run() {
		//开始售票
		sale();

	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

转载于 : http://www.verejava.com/?id=16992949250274