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

© 陌路行者 中级黑马   /  2013-7-3 18:21  /  1088 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陌路行者 于 2013-7-3 20:22 编辑
  1. class Ticket extends Thread
  2. {
  3.         int tick = 100;
  4.         public void run()
  5.         {
  6.                 while(true)
  7.                 {
  8.                         if(tick>0)
  9.                         {
  10.                                 System.out.println(Thread.currentThread().getName()+".........."+tick);
  11.                                 tick--;
  12.                         }

  13.                 }

  14.         }
  15. }
  16. class ThreadDemo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 //Ticket t = new Ticket();
  21.                 Thread t1 = new Thread(new Ticket());
  22.                 Thread t2 = new Thread(new Ticket());
  23.                 Thread t3 = new Thread(new Ticket());
  24.                 Thread t4 = new Thread(new Ticket());
  25.                 t1.start();
  26.                 t2.start();
  27.                 t3.start();
  28.                 t4.start();
  29.         }
  30. }
复制代码

就开了4个线程怎么还蹦到7了呢

3 个回复

倒序浏览
  Thread t1 = new Thread(new Ticket());  你用的是匿名对象。执行完没有指向就被回收了。所以会出现这种状况
回复 使用道具 举报
本帖最后由 杜光 于 2013-7-3 20:26 编辑

一:首先你这个代码调用的不是一个共享的Ticket,看你的代码是4个线程,每个线程都有100张票
二:Ticket extends Thread

  1. 主线程这样写比较好点

  2. Ticket t1 = new Ticket();
  3.                 Ticket t2 = new Ticket();
  4.                 Ticket t3 = new Ticket();
  5.                 Ticket t4 = new Ticket();

  6.                 t1.start();
  7.                 t2.start();
  8.                 t3.start();
  9.                 t4.start();
复制代码
第三:你写的貌似是实现接口的方法
  1. Ticket t = new Ticket();

  2.                 Thread t1 = new Thread(t);//创建了一个线程;
  3.                 Thread t2 = new Thread(t);//创建了一个线程;
  4.                 Thread t3 = new Thread(t);//创建了一个线程;
  5.                 Thread t4 = new Thread(t);//创建了一个线程;
  6.                 t1.start();
  7.                 t2.start();
  8.                 t3.start();
  9.                 t4.start();
复制代码
第四:你的主函数相当于一下子创建两个线程,而你start开启的是  t1,t2,t3,t4分别是 1,3,5,7  线程
         而四个  new Ticket 分别是是 0,2,4,6  线程


回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马