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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 糜芹 中级黑马   /  2015-6-2 19:12  /  332 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

跟视频对比了好久,都运行不出视频的效果..
把tick设置成1000也只有Thread-0执行,求问什么原因.
  1. class Ticket implements Runnable
  2. {
  3.         private int tick = 100;
  4.         Object obj = new Object();
  5.         boolean flag = true;
  6.         public void run()
  7.         {
  8.                 if(flag)
  9.                 {
  10.                         while(true)
  11.                         {
  12.                                 synchronized(this)//把this改成obj能正常多线程执行.
  13.                                 {
  14.                                         if(tick>0)//把tick>0改成tick>90的话,前面是全Thread-0执行,后面全是Thread-1执行.
  15.                                                 {
  16.                                                         try{Thread.sleep(10);}catch (Exception e){}
  17.                                                         System.out.println(Thread.currentThread().getName()+".R-sale:"+tick--);
  18.                                                 }
  19.                                         else
  20.                                                 break;
  21.                                 }
  22.                         }
  23.                 }
  24.                 else
  25.                         while(true)
  26.                         {
  27.                                 if(tick>0)
  28.                                 show();
  29.                                 else
  30.                                         break;
  31.                         }
  32.         }

  33.         public synchronized void show()//this
  34.         {
  35.                 if(tick>0)
  36.                 {
  37.                         try{Thread.sleep(10);}catch (Exception e){}
  38.                         System.out.println(Thread.currentThread().getName()+".S-sale:"+tick--);
  39.                 }
  40.         }
  41. }

  42. class ThisLockDemo
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 Ticket t = new Ticket();

  47.                 Thread t1 = new Thread(t);
  48.                 Thread t2 = new Thread(t);
  49.                 t1.start();
  50.                 try{Thread.sleep(10);}catch(Exception e){}
  51.                 t.flag = false;
  52.                 t2.start();
  53.         }
  54. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马