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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Fozei 于 2015-9-1 21:11 编辑

自学视频,看到了多线程那一部分了,模仿毕老师讲的卖票的小程序,大家请看:
  1. class TicketsSelling
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 tickets s1=new tickets("win---1");
  6.                 tickets s2=new tickets("win---2");
  7.                 tickets s3=new tickets("win---3");
  8.                 tickets s4=new tickets("win---4");
  9.                 s1.start();
  10.                 s2.start();
  11.                 s3.start();
  12.                 s4.start();

  13.         }
  14. }


  15. class tickets extends Thread
  16. {
  17.         private static int ticket=100;//定义一个static的变量存储票的张数,表示这个变量是公用的,四个窗口都可以用
  18.         private String win;
  19.         tickets(String win)
  20.         {
  21.                 super(win);//调用父类的构造函数给Thread起一个名字(面向对象没学扎实,理解的可能不对)
  22.         }
  23.         public void run()//覆盖run方法
  24.         {
  25.                 //保持while(true)循环不停(保持唤醒——自己的理解),经过试验,如果没有这个无线循环语句,只能卖出前四张票;改成while(ticket>0)更好
  26.                 while(ticket>0)
  27.                 {
  28.                         if(ticket>0)//只要还有余票,就执行下面的语句,即:继续卖票
  29.                                 System.out.println(Thread.currentThread().getName()+"    sells ticket   "+ticket--);
  30.                 }
  31.         
  32.         }

  33. }
复制代码
程序是可以运行的,也能实现需求功能。
我的疑问出现在这一句第32行:System.out.println(Thread.currentThread().getName()+" sells ticket "+ticket--);为什么把红字的部分,也就是“+“sells ticket””这部分内容删掉的话,程序运行结果就不一样了?删掉之后运行出来的些数字是怎么运行出来的???希望热心的朋友能够答疑解惑一下,不胜感激额。



3 个回复

倒序浏览
自己回一个,防止沉底,大家快快看看。
回复 使用道具 举报
“sells ticket”是字符串会原样输出的,你删掉的话它就不会输出了,但这并不影响程序的运行结果,之所以看起来程序的运行结果不一样,是因为Thread.currentThread().getName()获取的线程名称与余票数混合在了一起
回复 使用道具 举报
suichuan689 发表于 2015-9-2 08:50
“sells ticket”是字符串会原样输出的,你删掉的话它就不会输出了,但这并不影响程序的运行结果,之所以看 ...

啊,仔细看了一下我的输出结果,还真是跟你说的一样,谢谢了,非常感谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马