黑马程序员技术交流社区

标题: 售票程序为什么只打印了一线程? [打印本页]

作者: sam3say    时间: 2014-12-15 11:32
标题: 售票程序为什么只打印了一线程?
  1. //定义Ticket1类实现runnable接口
  2. class Ticket1 implements Runnable
  3. {
  4.         private int ticket=10;
  5.         //Object lock=new Object();
  6.         public void run()
  7.         {
  8.                 while(true)
  9.                 {
  10.                         saleTicket();//调用售票方法
  11.                         if(ticket<=0)
  12.                         {
  13.                                 break;
  14.                         }
  15.                 }
  16.         }

  17.         //定义一个同步方法saleTicket
  18.         private synchronized void saleTicket()
  19.         {
  20.                         if(ticket>0)
  21.                         {
  22.                                 try
  23.                                 {
  24.                                         Thread.sleep(10);//经过此线程的时候休眠10毫秒
  25.                                 }
  26.                                 catch (InterruptedException e)
  27.                                 {
  28.                                         e.printStackTrace();
  29.                                 }
  30.                                 System.out.println(Thread.currentThread().getName()+"----卖出的票:"+ticket--);
  31.                         }
  32.         }
  33. }
  34. class  Example12
  35. {
  36.         public static void main(String[] args)
  37.         {
  38.                 Ticket1 t1=new Ticket1();//创建Ticket1对象
  39.                 //创建并开启四个线程
  40.                 new Thread(t1,"线程一").start();
  41.                 new Thread(t1,"线程二").start();
  42.                 new Thread(t1,"线程三").start();
  43.                 new Thread(t1,"线程四").start();
  44.                 //System.out.println("Hello World!");
  45.         }
  46. }
复制代码

控制台只打印了线程一,1到10的结果。
为什么没有打印出来别的线程呢?


作者: 姿_`态    时间: 2014-12-15 12:36
就卖10张票太少了, 你卖1000张 ,你看一个售票员还忙得过来不。。。
作者: Rain2692    时间: 2014-12-15 12:44
恩,楼上说的对,你的数据太少了,最少1000在看看,或者加入sleep看看,给别的线程有执行的时间
作者: lishuliang28    时间: 2014-12-15 21:13
线程1起来以后,加个等待,sleep()在试试
作者: wzl963358694    时间: 2014-12-15 21:38
不错慢慢的正能量
作者: wzl963358694    时间: 2014-12-15 21:42
不错慢慢的正能量
作者: manu_chen    时间: 2014-12-15 21:55
路过,学习学习
作者: chudaming213    时间: 2014-12-15 22:35
你可以吧一线程注释掉,看看是不是有问题,要是没有就是数据太少的原因。
作者: 飞跃离开    时间: 2014-12-15 23:01
票数太少了,其他的线程还没有获得执行权呢
作者: zcyemenye    时间: 2014-12-15 23:06
票太少了  别的线程没有抢到
作者: Bali    时间: 2014-12-15 23:41
人多票少!
作者: sam3say    时间: 2014-12-16 08:12
谢谢大家的指导啊




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