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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hoop.zeng 中级黑马   /  2015-5-7 09:26  /  816 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚看到多线程,老师举了一个卖票的例子:定义4个窗口(线程),将100张票卖出并打印。代码如下:
  1. class J11_1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //新建4个窗口
  6.                 Ticket t1 = new Ticket();
  7.                 Ticket t2 = new Ticket();
  8.                 Ticket t3 = new Ticket();
  9.                 Ticket t4 = new Ticket();
  10.                
  11.                 //开始窗口线程
  12.                 t1.start();
  13.                 t2.start();
  14.                 t3.start();
  15.                 t4.start();
  16.         }
  17. }
  18. class Ticket extends Thread
  19. {
  20.         //票的总数为100
  21.         private static int num=100;
  22.         public void run()
  23.         {
  24.                 while(true)
  25.                 {
  26.                         //将100张票全部卖出,并打印
  27.                         if(num > 0)
  28.                         {
  29.                                 System.out.println(currentThread().getName()+"sale:"+num--);
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码

结果如附件:

虽然是多线程,但语句的执行应该是100-1的顺序来执行吧。
结果却没有按照100-1的顺序打印,老师提到了这跟java调用了cmd有关,但还是不太理解。



6 个回复

正序浏览
hoop.zeng 发表于 2015-5-7 13:32
毕向东最新经典Java基础视频\第11天
133多线程(售票的例子)

噢,谢谢
回复 使用道具 举报
Mr7952 发表于 2015-5-7 12:42
你最后那个理解应该是对的。另外问下,你看的是哪个视频啊

毕向东最新经典Java基础视频\第11天
133多线程(售票的例子)
回复 使用道具 举报
你最后那个理解应该是对的。另外问下,你看的是哪个视频啊
回复 使用道具 举报
hoop.zeng 发表于 2015-5-7 11:24
private static int num = 100;
因为是静态变量,是所有对象共享的啊。
虽然四个线程的执行是随机,但都 ...

那这样的话四个线程共享一个,但四个线程谁会先执行是不确定的,CPU在不停地在做切换动作,所以打印的顺序不是依次递减的,这样就对了吧
回复 使用道具 举报
hufu4635 发表于 2015-5-7 10:00
不明白你啥意思,据我分析,当主程序一运行,根据你的代码就开启了四个线程,因为你是继承了Thread类,所以 ...

private static int num = 100;
因为是静态变量,是所有对象共享的啊。
虽然四个线程的执行是随机,但都遵循-1的操作。
如第一步不论执行的是哪个线程,num都为100;
第二步不论是哪个线程,num都为99.依次类推
回复 使用道具 举报
不明白你啥意思,据我分析,当主程序一运行,根据你的代码就开启了四个线程,因为你是继承了Thread类,所以是每个线程都卖100张票,这一张票没有共享。顺序是随机的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马