黑马程序员技术交流社区

标题: 多线程卖票小程序代码分享 [打印本页]

作者: 周博文    时间: 2015-8-18 22:34
标题: 多线程卖票小程序代码分享
  1. /*
  2. * Ticket: 属性:编号(代表第几张票)  行为:打印票据信息(重写toString方法)
  3. */
  4. public class Ticket {
  5.         private int num;

  6.         public Ticket(int num) {
  7.                 this.num = num;
  8.         }
  9.        
  10.         @Override
  11.         public String toString() {
  12.                 return "黑马大电影:" + num + "号票";
  13.         }

  14. }
复制代码
  1. public class SealWindow implements Runnable {
  2.        
  3.         private TicketSealCenter tickets;

  4.         public SealWindow(TicketSealCenter tickets) {
  5.                 this.tickets = tickets;
  6.         }

  7.         @Override
  8.         public void run() {
  9.                 while(tickets.hasTicket()) {
  10.                         synchronized(tickets) {
  11.                                 if(!tickets.hasTicket()) {
  12.                                         break;
  13.                                 }
  14.                                 Ticket t = tickets.sellTicket();
  15.                                 System.out.println(Thread.currentThread().getName() + "卖出了 : " + t);
  16.                         }
  17.                 }
  18.         }

  19. }
复制代码
  1. import java.util.LinkedList;

  2. /*
  3. * TicketSealCenter:
  4. * 售票中心应该持有所有的票对象,定义一个集合用来存储票对象,由于票不能重复,因此使用Set集合
  5. * 属性:Set<Ticket>集合用于存储所有票的信息
  6. *            int  number  定义初始的票的数量
  7. * 在构造方法中对集合进行初始化,即对票进行编号,票的数量从外界获取
  8. */
  9. public class TicketSealCenter {
  10.         private LinkedList<Ticket> tickets = new LinkedList<>();
  11.        
  12.         public TicketSealCenter(int num) {
  13.                 for (int i = 1; i <= num ; i++) {
  14.                         tickets.add(new Ticket(i));
  15.                 }
  16.         }
  17.        
  18.         public Ticket sellTicket() {
  19.                 return tickets.remove();
  20.         }
  21.        
  22.         public boolean hasTicket() {
  23.                 return !tickets.isEmpty();
  24.         }
  25. }
复制代码

作者: 戒不掉的温柔    时间: 2015-8-18 23:06
学习了。。。。
作者: 谭威威威威    时间: 2015-8-18 23:07

作者: 阮文江    时间: 2015-8-18 23:10
顶一下,杠杠的
作者: 风华正茂    时间: 2015-8-19 12:25
谢谢楼主分享,楼主辛苦了
作者: 泽尻绘里香    时间: 2015-8-19 14:22
真是用心了
作者: DD_vincent    时间: 2015-8-19 18:15
把Set集合放进来也是可以的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2