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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周金帅 初级黑马   /  2012-5-31 17:27  /  1725 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Tickit implements Runnable
  2. {
  3.         private int tickit=100;
  4.         Object o=new Object();
  5.         public void run()
  6.         {   
  7.                 synchronized(o)
  8.                 {
  9.                         while(tickit>0)
  10.                         {
  11.                         try{Thread.sleep(1);}catch(Exception e){}
  12.                         System.out.println(Thread.currentThread().getName()+"卖票"+tickit--);
  13.                         }
  14.                 }
  15.         }
  16. }

  17. class ThreadDemo1
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 Tickit t=new Tickit();
  22.                 Thread t1=new Thread(t);
  23.                 Thread t2=new Thread(t);
  24.                 Thread t3=new Thread(t);
  25.                 Thread t4=new Thread(t);
  26.                
  27.                 t1.start();
  28.                 t2.start();
  29.                 t3.start();
  30.                 t4.start();
  31.         }
  32. }
复制代码
运行结果,只有0线程运行,哪里出错了啊

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
呵呵,你把while的位置放错了。应该放在synchronized(o)
外面。

像你那样t1进入后循环玩才能出来啊,所以就只有t1线程啊。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
吴小铁你好 发表于 2012-5-31 17:35
呵呵,你把while的位置放错了。应该放在synchronized(o)
外面。

额。。。知道了
回复 使用道具 举报
class  TicketDemo
{
         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();
         }
}

class Ticket implements Runnable
{
         private int ticket = 200;
         Object  obj = null;
                 //new String();

        public void run() {
                 obj = new Object();
                 synchronized(obj) {
                                 
                         //while(true) {
                                 while(ticket>0) {
                                         try{
                                                 Thread.sleep(5);
                                         } catch(Exception e) {
                                                 e.printStackTrace();
                                         }
                                         System.out.println(Thread.currentThread().getName()+
                                        " sale:"+ ticket--);
                                 }
                        // }
                        
                }
         }


Thread-3 sale:200
Thread-1 sale:199
Thread-2 sale:197
Thread-0 sale:198
Thread-3 sale:196
Thread-1 sale:195
Thread-0 sale:193
Thread-2 sale:194
Thread-3 sale:192
Thread-1 sale:190
Thread-0 sale:191
Thread-2 sale:189
Thread-3 sale:188
Thread-0 sale:186
Thread-1 sale:187
Thread-2 sale:185
Thread-3 sale:184
Thread-0 sale:182
回复 使用道具 举报
小手一抖 金币到手
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马