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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-8-23 21:53  /  1407 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Ticket implements Runnable
{
private int tick=1000;
Object obj=new Object();
public void run()
{
  while(true)
  {
   synchronized(obj)
   {
    if(tick>0)
    {
     try
     {
      Thread.sleep(10);
     }
     catch (Exception e)
     {
      System.out.println("执行");
     }
     System.out.println(Thread.currentThread().getName()+tick--);
    }
   }
  }
}
}
class TicketDemo2
{
public static void main(String[] args)
{
  Ticket t=new Ticket();
  Thread t1=new Thread(t);
  Thread t2=new Thread(t);
  Thread t3=new Thread(t);
  Thread t4=new Thread(t);
  t1.start();
  t2.start();
  t3.start();
  t4.start();
}
}

下面是打印的一段
Thread-0385
Thread-0384
Thread-0383
Thread-0382
Thread-0381
Thread-0380
Thread-0379
Thread-0378
Thread-0377
Thread-3376
Thread-3375
Thread-3374
Thread-3373
Thread-3372
Thread-3371
Thread-3370
Thread-3369

1.为什么打印会从300多到3000多?
2.run方法下面的while(true)是什么意思?
3.我这个程序定义了三个Thread,为什么打印没有显示啊?
求解

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
好吧  我先说第一个问题

1. 楼主所说的300多到3000多 应该是 03**3***   看清楚啊~~第一位 就是线程的名字  所以不是从300多跳到3000多
而是从第一个线程跳到第4个线程了。

2.while(true)是为了让这个循环一直循环下去,是为了省事儿。其实应该限定当票数==0的时候停止,所以楼主不要纠结这个了。老师就是为了掩饰线程运行的过程。

3.请看1.

点评

Sorry,理由写错了,嘿嘿  发表于 2012-8-24 09:20

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
你吧这句话改一下 你再运行一下就清楚了!

  System.out.println(Thread.currentThread().getName()+tick--);
改为
  System.out.println(Thread.currentThread().getName()+"-----"+tick--);
回复 使用道具 举报
1.为什么打印会从300多到3000多?
因为你没有在Thread.currentThread().getName()后面加这个“     ” 。
2.run方法下面的while(true)是什么意思。
这个是一直循环的意思。
3.我这个程序定义了三个Thread,为什么打印没有显示啊?
楼上正解

回复 使用道具 举报
问题已解决  谢谢。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马