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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵珏 中级黑马   /  2014-1-11 01:02  /  1343 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我改写了一下视频里的卖票的小程序, 如下:


  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张票全部都是第一个线程卖出的?

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 淡定

查看全部评分

6 个回复

倒序浏览
代码好像没问题吧 应该是电脑的问题,有时候一个线程就全部打印出来了 这个很正常的 你在输出后面加上sleep()语句就可以很明显地看到效果了
回复 使用道具 举报
我用电脑验证下,代码没问题,只是和谐了~你可以在   sell(); 后加上sleep()语句 就能看出来了

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
把100改成1000试试就出来了   代码应该没错

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
楼上正解 !!
回复 使用道具 举报
li520 来自手机 中级黑马 2015-6-1 23:56:34
地板
蛮不错的
回复 使用道具 举报
li520 来自手机 中级黑马 2015-6-1 23:58:17
7#
这个有点难
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马