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;
}
}