黑马程序员技术交流社区

标题: 关于线程的问题2 [打印本页]

作者: ぺsimon☆    时间: 2013-4-20 17:39
标题: 关于线程的问题2
本帖最后由 ぺsimon☆ 于 2013-4-21 11:18 编辑
  1. 代码如下
  2. /**
  3. 需求:简单的买票程序
  4. 多个窗口买票

  5. */

  6. class Ticket extends Thread
  7. {
  8.         private static int t=100;
  9.         public void run()
  10.         {
  11.         while(true)
  12.         {
  13.         if(t>0)
  14.         {
  15.         System.out.println(Thread.currentThread().getName()+"sale:"+t--);
  16.         }
  17.         }
  18.         }
  19. }

  20. class TicketDemo
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.         Ticket t1=new Ticket();
  25.         Ticket t2=new Ticket();
  26.         Ticket t3=new Ticket();
  27.         Ticket t4=new Ticket();
  28.         t1.start();
  29.         t2.start();
  30.         t3.start();
  31.         t4.start();
  32.         }
  33. }
复制代码
问题:下面这句话是怎么运行的呢?怎么打印结果有  Thread-2sale:100
while(true)
        {
        if(t>0)
        {
        System.out.println(Thread.currentThread().getName()+"sale:"+t--);
        }
我的理解是t=100时,判断当whie是真运行下面代码,判断t>0,执行输出代码:System.out.println(Thread.currentThread().getName()+"sale:"+t--);
输出代码不是:t--不是输出99吗,怎么变了100 的呢?  100是怎么来的呢?


作者: JavaUtil    时间: 2013-4-20 17:46
本帖最后由 JavaUtil 于 2013-4-20 17:52 编辑

这是运算符的特性。
当你的运算符是(++、--)时,需要判断它是前置还是后置。
如果是前置,表示先赋值,后参与运算。
如果是后置,表示先参与运算,然后再赋值。
你这里的是t--,他会先赋值显示t,再参与运算。等同于:
System.out.println(Thread.currentThread().getName()+"sale:"+t);
t=t-1;

作者: ld5128702    时间: 2013-4-20 19:16
例如:x=t--,它是先赋值给x然后才自减,所以是显示也有100
作者: ぺsimon☆    时间: 2013-4-20 22:25
明白了谢谢
作者: 黄玉昆    时间: 2013-4-21 07:38
如果问题解决了,请将问题分类改为“已解决”,谢谢




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