package no2;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class SealTicket {
/**
* 13、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ticket ticket = new Ticket();
TicketSealCenter tsc = new TicketSealCenter(ticket);
SealWindow sw= new SealWindow(ticket);
Thread t = new Thread(tsc);
Thread t1 = new Thread(sw);
Thread t2 = new Thread(sw );
Thread t3 = new Thread(sw );
Thread t4 = new Thread(sw );
t1.setName("一号窗口");
t2.setName("二号窗口");
t3.setName("三号窗口");
t4.setName("四号窗口");
t.start();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Ticket{
List<String > list = new ArrayList<String>();
String name = "No.";
int tnum =0;
public synchronized void get() {
while(list.size()<1){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"出售"+list.get(0));
list.remove(0);
this.notifyAll();
}
public synchronized void set() {
while(list.size()>5){
try {
this.notifyAll();
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("生产第"+ ++tnum +"张票");
list.add(name+""+tnum);
this.notifyAll();
}
}
class SealWindow implements Runnable{
Ticket ticket ;
public SealWindow(Ticket t) {
super();
this.ticket = t;
}
@Override
public void run() {
// TODO Auto-generated method stub
ticket.get();
}
}
class TicketSealCenter implements Runnable{
Ticket ticket ;
public TicketSealCenter(Ticket t) {
super();
this.ticket = t;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
ticket.set();
}
}
}
结果:
生产第1张票
一号窗口出售No.1
生产第2张票
生产第3张票
生产第4张票
生产第5张票
生产第6张票
生产第7张票
三号窗口出售No.2
生产第8张票
四号窗口出售No.3
二号窗口出售No.4
生产第9张票
生产第10张票
估摸着堵塞了。。但编程的时候自我感觉良好来着。。解决掉这题我就面试社招。。来哥们帮一下。。我币有多。。回答的好有送哦。。 |
|