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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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)
  13.                                 {
  14.                                         if(tick>0)
  15.                                         {
  16.                                                 try{Thread.sleep(10);}catch (Exception e){}
  17.                                                 System.out.println(Thread.currentThread().getName()+"....code :"+ tick--);
  18.                                         }
  19.                                 }
  20.                         }
  21.                 }
  22.                 else
  23.                         while(true)
  24.                                 show();
  25.         }
  26.         public synchronized void show()
  27.         {
  28.                 if(tick>0)
  29.                 {
  30.                         try{Thread.sleep(10);}catch (Exception e){}
  31.                         System.out.println(Thread.currentThread().getName()+"....show.... :"+tick--);
  32.                 }
  33.         }
  34. }



  35. class ThisLockDemo
  36. {
  37.         public static void main(String[] args)
  38.         {
  39.                 Ticket t = new Ticket();

  40.                 Thread t1 = new Thread(t);
  41.                 Thread t2 = new Thread(t);
  42.                 t1.start();
  43.                 try{Thread.sleep(10);}catch (Exception e){}
  44.                 t.flag = false;
  45.                 t2.start();
  46.         }
  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

5 个回复

倒序浏览
  1. Thread-0....code :100
  2. Thread-0....code :99
  3. Thread-0....code :98
  4. Thread-0....code :97
  5. Thread-0....code :96
  6. Thread-1....show.... :95
  7. Thread-1....show.... :94
  8. Thread-1....show.... :93
  9. Thread-1....show.... :92
  10. Thread-1....show.... :91
复制代码

上面是我这边执行的结果,线程2启动了啊
回复 使用道具 举报
我的一直是这样啊

4.png (12.7 KB, 下载次数: 16)

4.png
回复 使用道具 举报
一直到1都是只有只有一个线程

2.png (49.86 KB, 下载次数: 12)

2.png
回复 使用道具 举报
  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)
  13.                                 {
  14.                                         if(tick>0)
  15.                                         {
  16.                                                 try{Thread.sleep(100);}catch (Exception e){}//把sleep的时间改长点试试
  17.                                                 System.out.println(Thread.currentThread().getName()+"....code :"+ tick--);
  18.                                         }
  19.                                 }
  20.                         }
  21.                 }
  22.                 else
  23.                         while(true)
  24.                                 show();
  25.         }
  26.         public synchronized void show()
  27.         {
  28.                 if(tick>0)
  29.                 {
  30.                         try{Thread.sleep(100);}catch (Exception e){}//把sleep的时间改长点试试
  31.                         System.out.println(Thread.currentThread().getName()+"....show.... :"+tick--);
  32.                 }
  33.         }
  34. }



  35. class ThisLockDemo
  36. {
  37.         public static void main(String[] args)
  38.         {
  39.                 Ticket t = new Ticket();

  40.                 Thread t1 = new Thread(t);
  41.                 Thread t2 = new Thread(t);
  42.                 t1.start();
  43.                 try{Thread.sleep(10);}catch (Exception e){}
  44.                 t.flag = false;
  45.                 t2.start();
  46.         }
  47. }
复制代码

把sleep的时间改长点试试

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 1 0
没有问题,如果你没有出现第二个线程,也是正常的,因为本来就是一起执行的,有可能第二个线程还没开始执行,第一个线程已经执行完毕
解决的两个方法:
1.运行多次。有可能会发现两个线程交替运行
2.让线程等待时间长一些

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马