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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘学明    高级黑马   /  2013-4-30 08:41  /  1694 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘学明    于 2013-5-1 18:43 编辑

多线程打印火车票的例子
如何使用extends Thread 这种方式使用共同打印100张火车票  除了把火车票静态以外
private static  int tick  = 100;
  1. class  Ticket extends Thread
  2. {
  3.         private int tick = 100;

  4.         public void run()
  5.         {
  6.                 while(true)
  7.                 {
  8.                         if(tick>0)
  9.                                 System.out.println(Thread.currentThread().getName()+"..."+tick--);
  10.                 }
  11.                
  12.         }
  13.         
  14. }

  15. class ThreadTest
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                  Ticket t1 = new Ticket();
  20.                  Ticket t2 = new Ticket();
  21.                  Ticket t3 = new Ticket();

  22.                  t1.start();
  23.                  t2.start();
  24.                  t3.start();
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
使用extends Thread这种方式,把火车票Ticket单独封装成一个对象,作为共享数据,也可以,以下是代码:
  1. class  SellTicket extends Thread

  2. {
  3.         public SellTicket(Ticket ticket)
  4.         {
  5.                 this.ticket = ticket;
  6.         }
  7.         private Ticket ticket;
  8.         @Override
  9.         public void run()
  10.         {
  11.                 while(true)
  12.                         ticket.printTicket();
  13.         }
  14.        

  15. }
  16. class Ticket
  17. {
  18.         private int count = 100;
  19.         synchronized void printTicket()
  20.         {
  21.                 try{Thread.sleep(20);}catch(InterruptedException e){}
  22.                 if(count>0)
  23.                         System.out.println(Thread.currentThread().getName()+"..."+count--);
  24.         }
  25. }


  26. class ThreadTest

  27. {

  28.        public static void main(String[] args)

  29.       {

  30.                Ticket t = new Ticket();
  31.                new SellTicket(t).start();
  32.                new SellTicket(t).start();

  33.        }

  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
这是为技术分来的吗?
回复 使用道具 举报
可以使用单例设计模式啊!代码如下:
  1. class Ticket
  2. {
  3.         private int ticket = 100;
  4.         private static final Ticket t = new Ticket();
  5.         private Ticket(){}
  6.         public static Ticket getInstance()
  7.         {
  8.                 return t;
  9.         }
  10.         public void print()
  11.         {
  12.                 synchronized(t)
  13.                 {
  14.                         while(ticket>0)
  15.                         {
  16.                                 try{Thread.sleep(10);}catch(Exception e){}
  17.                                 System.out.println(Thread.currentThread().getName()+"..."+ticket--);
  18.                         }
  19.                                
  20.                 }
  21.                
  22.         }
  23.        
  24. }
  25. class TicketPrint extends Thread
  26. {
  27.         Ticket t = Ticket.getInstance();
  28.         public void run()
  29.         {
  30.                 t.print();
  31.         }
  32. }


  33. class MaipiaoDanli
  34. {
  35.         public static void main(String[] args)
  36.         {
  37.                 TicketPrint tc1 = new TicketPrint();
  38.                 TicketPrint tc2 = new TicketPrint();
  39.                 TicketPrint tc3 = new TicketPrint();
  40.                 TicketPrint tc4 = new TicketPrint();
  41.                 tc3.start();
  42.                 tc4.start();
  43.                 tc1.start();
  44.                 tc2.start();
  45.                
  46.         }
  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
写得比较简单,希望能帮到你
回复 使用道具 举报
陈国斌 发表于 2013-4-30 10:21
可以使用单例设计模式啊!代码如下:

这个不错啊 试下看看
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-30 23:21:02
7#
如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马