黑马程序员技术交流社区

标题: 关于同步函数的一个问题 [打印本页]

作者: 赵珏    时间: 2014-1-11 01:02
标题: 关于同步函数的一个问题
我改写了一下视频里的卖票的小程序, 如下:


  1. /**
  2. 用多线程的第二种方法实现一个卖票的小程序
  3. 要求: 用3个线程同时卖100张票

  4. */


  5. class Tickets implements Runnable
  6. {
  7.        
  8.         private int TicketNumber = 100;

  9.         private synchronized void sell()
  10.         {
  11.                 if(TicketNumber > 0)
  12.                                         System.out.println(Thread.currentThread().getName()+"卖出第 "+TicketNumber--+" 张票.");
  13.         }
  14.                
  15.         public void run()
  16.         {
  17.                 while(true)
  18.                 {
  19.                         sell();
  20.                 }
  21.         }
  22. }


  23. public class ThreadDemo2
  24. {
  25.         public static void main(String arg[])
  26.         {
  27.                 Tickets Today = new Tickets();
  28.                
  29.                 Thread t1 = new Thread(Today);
  30.                 Thread t2 = new Thread(Today);
  31.                 Thread t3 = new Thread(Today);
  32.                
  33.                 t1.start();
  34.                 t2.start();
  35.                 t3.start();
  36.         }
  37. }
复制代码


问题是: 在运行时, 为什么打印出来的线程名称100张票全部都是第一个线程卖出的?
作者: ixiangfeng    时间: 2014-1-11 10:33
代码好像没问题吧 应该是电脑的问题,有时候一个线程就全部打印出来了 这个很正常的 你在输出后面加上sleep()语句就可以很明显地看到效果了
作者: 姜胜凯    时间: 2014-1-11 19:20
我用电脑验证下,代码没问题,只是和谐了~你可以在   sell(); 后加上sleep()语句 就能看出来了
作者: 路西法    时间: 2014-1-11 19:47
把100改成1000试试就出来了   代码应该没错
作者: smartisan    时间: 2015-5-1 15:09
楼上正解 !!
作者: li520    时间: 2015-6-1 23:56
蛮不错的
作者: li520    时间: 2015-6-1 23:58
这个有点难




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