A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vermouth 中级黑马   /  2015-1-16 15:22  /  1246 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 一时兴起重写了一遍五窗口同时卖票的小代码
复制代码


6 个回复

倒序浏览

  1. public class TicketDemo{
  2.         public static void main(String [] args)throws Exception{
  3.        
  4.                 System.out.println(Thread.currentThread().getName()+" Begin :");
  5.                 Runnable r = new Sale();
  6.                
  7.                 Thread t1 = new Thread(r);
  8.                 Thread t2 = new Thread(r);
  9.                 Thread t3 = new Thread(r);
  10.                 Thread t4 = new Thread(r);
  11.                 Thread t5 = new Thread(r);
  12.                
  13.                 t1.start();
  14.                 t2.start();
  15.                 t3.start();
  16.                 t4.start();
  17.                 t5.start();
  18.         }
  19. }

  20. /**
  21.         sale类实现runnable接口,把卖票代码写进去,让多个卖票口可以同时执行。
  22. */
  23. class Sale implements Runnable{
  24.         private Ticket ticket = Ticket.getInstance();
  25.         public void run(){
  26.                 try{
  27.                         while (true){
  28.                                 ticket.sale();
  29.                                 Thread.sleep(100);
  30.                         }
  31.                 }
  32.                 catch(InterruptedException e){
  33.                         throw new RuntimeException("error");
  34.                 }
  35.                
  36.         }
  37. }

  38. /**
  39.         单例涉及模式:创建Ticket类
  40. */
  41. class Ticket {
  42.         private static Ticket ticket = null;
  43.         private int count = 1000;
  44.         public static Ticket getInstance(){
  45.                 if (ticket == null)
  46.                         synchronized (Ticket.class){
  47.                                 if (ticket == null)
  48.                                         ticket = new Ticket();
  49.                         }
  50.                 return ticket;
  51.         }
  52.         /*
  53.                 同步方法 里面的代码线程安全,保证卖票不冲突
  54.         */
  55.         public synchronized void sale(){
  56.                 if (count > 0)
  57.                         System.out.println(Thread.currentThread().getName()+"sale: "+count--);
  58.                 else{
  59.                 }
  60.         }
  61.         private Ticket(){}
  62. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1 赞一个!

查看全部评分

回复 使用道具 举报
果然名牌毕业的,名不虚传啊
回复 使用道具 举报
wocan23 发表于 2015-1-16 19:46
果然名牌毕业的,名不虚传啊

{:2_31:}不要嘲讽了 么么哒。

准备面试中,奋力把代码敲一遍。
回复 使用道具 举报
楼主加油面试!!!祝面个高分!!!!
对了,楼主,我拿你的学习了一下多线程和单例。
程序不会停下来,所以有个建议就是while循环那里弄个标记,卖完票了就停了。
回复 使用道具 举报
自己试着写没写出来,我是来看代码的。。。
回复 使用道具 举报
温晓慧 发表于 2015-1-17 19:37
楼主加油面试!!!祝面个高分!!!!
对了,楼主,我拿你的学习了一下多线程和单例。
程序不会停下来,所 ...

嗯嗯 谢谢 我在else那里留了位置 想写一些票卖完了的处理 后来想想也不知道是再给一些票还是停止,就这么放着了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马