黑马程序员技术交流社区
标题:
7、 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信...
[打印本页]
作者:
kebi
时间:
2015-11-15 12:15
标题:
7、 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信...
package com.itheima;
import java.util.ArrayList;
public class Test7 {
public static void main(String[] args) {
TicketSealCenter tc=new TicketSealCenter();
//定义票
for(int i=0;i<50;i++)
{
tc.putTicket(new Ticket(i, i+8+""));
}
//定义售票窗口
SealWindow sw1=new SealWindow(tc);
SealWindow sw2=new SealWindow(tc);
SealWindow sw3=new SealWindow(tc);
SealWindow sw4=new SealWindow(tc);
SealWindow sw5=new SealWindow(tc);
//窗口售票开始
sw1.start();
sw2.start();
sw3.start();
sw4.start();
sw5.start();
}
}
class SealWindow extends Thread{
private final TicketSealCenter tc;
//建立窗口
public SealWindow(TicketSealCenter tc)
{
this.tc=tc;
}
@Override
public void run() {
while(true)
{
Ticket ticket=tc.getTicket();//获取售票
if(ticket==null)//如果该窗口没有票可售,则结束该线程
{
System.out.println(Thread.currentThread().getName()+"窗口已售完");
break;
}
else
{
System.out.println(Thread.currentThread().getName()+"获取票,票号为:"+ticket.getTicketNum());
}
}
}
}
class TicketSealCenter{
//存放车票
private ArrayList<Ticket> tickets=new ArrayList<Ticket>();
//存储票数
private volatile int capacity=0;
//存票
public synchronized void putTicket(Ticket ticket)
{
tickets.add(ticket);
capacity++;
}
//获取票
public synchronized Ticket getTicket()
{
if(capacity==0)
return null;
Ticket ticket=tickets.get(capacity-1);
capacity--;
tickets.remove(ticket);
return ticket;
}
}
class Ticket{
private int ticketNum;//票号
private String seatNum;//座位号
public Ticket(int ticketNum,String seatNum){
this.ticketNum=ticketNum;
this.seatNum=seatNum;
}
public int getTicketNum() {
return ticketNum;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2