黑马程序员技术交流社区

标题: Runnable同步问题 [打印本页]

作者: 吴通    时间: 2012-8-23 21:53
标题: Runnable同步问题
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,为什么打印没有显示啊?
求解

作者: 杨卓儒    时间: 2012-8-23 22:05
好吧  我先说第一个问题

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

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

3.请看1.


作者: 杨卓儒    时间: 2012-8-23 22:07
你吧这句话改一下 你再运行一下就清楚了!

  System.out.println(Thread.currentThread().getName()+tick--);
改为
  System.out.println(Thread.currentThread().getName()+"-----"+tick--);
作者: 童兴龙    时间: 2012-8-24 08:38
1.为什么打印会从300多到3000多?
因为你没有在Thread.currentThread().getName()后面加这个“     ” 。
2.run方法下面的while(true)是什么意思。
这个是一直循环的意思。
3.我这个程序定义了三个Thread,为什么打印没有显示啊?
楼上正解


作者: 吴通    时间: 2012-8-24 20:05
问题已解决  谢谢。。。




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