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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李凤鸣 于 2012-12-7 01:43 编辑
  1. class Ticket4 implements Runnable
  2. {
  3.         private static int tick=100;
  4.         Object object=new Object();
  5.         boolean flag=true;
  6.         public void run()
  7.         {
  8.                 if (flag) {
  9.                         while (true) {
  10.                                 synchronized (this){
  11.             if (tick>0) {
  12.                                                 try {
  13.                                                         Thread.sleep(10);
  14.                                                 } catch (Exception e) {
  15.                                                         // TODO: handle exception
  16.                                                 }
  17.                                                 System.out.println(Thread.currentThread().getName()+"..code :"+tick--);
  18.                                         }
  19.                                 }
  20.                         }
  21.                 }else {
  22.                         while (true) {
  23.                                 show();
  24.                                 
  25.                         }
  26.                         
  27.                 }
  28.                
  29.         }
  30.         public static synchronized void show()
  31.         {
  32.                 if (tick>0) {
  33.                         try {
  34.                                 Thread.sleep(10);
  35.                         } catch (Exception e) {
  36.                                 // TODO: handle exception
  37.                         }
  38.                         System.out.println(Thread.currentThread().getName()+"..show()..."+tick--);
  39.                 }
  40.         }
  41. }

  42. public class StaticMethodDemo {
  43.         public static void main(String[] args) {
  44.                 Ticket4 ticket4=new Ticket4();
  45.                 Thread t1=new Thread(ticket4);
  46.                 Thread t2=new Thread(ticket4);
  47.                 t1.start();
  48.                 try {
  49.                         Thread.sleep(10);
  50.                 } catch (Exception e) {
  51.                         // TODO: handle exception
  52.                 }
  53.                 ticket4.flag=false;
  54.                 t2.start();
  55.         }

  56. }
复制代码
使用锁时,静态方法中也不可以定义this
可我用this出的结果跟老师的不一样
老师的最后会打印出零

可我的运行几遍之后都是正常的啊,到底哪里有问题了

结果:
Thread-0..code :100
Thread-1..show()...99
Thread-1..show()...98
Thread-1..show()...97
Thread-1..show()...96
Thread-0..code :95
Thread-0..code :94
Thread-0..code :93
Thread-0..code :92
Thread-0..code :91
Thread-0..code :90
Thread-0..code :89
Thread-0..code :88
Thread-0..code :87
Thread-0..code :86
Thread-0..code :85
Thread-0..code :84
Thread-0..code :83
Thread-0..code :82
Thread-0..code :81
Thread-0..code :80
Thread-0..code :79
Thread-0..code :78
Thread-0..code :77
Thread-0..code :76
Thread-0..code :75
Thread-0..code :74
Thread-0..code :73
Thread-0..code :72
Thread-0..code :71
Thread-0..code :70
Thread-0..code :69
Thread-0..code :68
Thread-0..code :67
Thread-0..code :66
Thread-0..code :65
Thread-0..code :64
Thread-0..code :63
Thread-0..code :62
Thread-0..code :61
Thread-0..code :60
Thread-0..code :59
Thread-0..code :58
Thread-0..code :57
Thread-0..code :56
Thread-0..code :55
Thread-0..code :54
Thread-0..code :53
Thread-0..code :52
Thread-0..code :51
Thread-0..code :50
Thread-0..code :49
Thread-0..code :48
Thread-0..code :47
Thread-0..code :46
Thread-0..code :45
Thread-0..code :44
Thread-0..code :43
Thread-0..code :42
Thread-0..code :41
Thread-0..code :40
Thread-0..code :39
Thread-0..code :38
Thread-0..code :37
Thread-0..code :36
Thread-0..code :35
Thread-0..code :34
Thread-0..code :33
Thread-0..code :32
Thread-0..code :31
Thread-0..code :30
Thread-0..code :29
Thread-0..code :28
Thread-0..code :27
Thread-0..code :26
Thread-0..code :25
Thread-0..code :24
Thread-0..code :23
Thread-0..code :22
Thread-0..code :21
Thread-0..code :20
Thread-0..code :19
Thread-0..code :18
Thread-0..code :17
Thread-0..code :16
Thread-0..code :15
Thread-0..code :14
Thread-0..code :13
Thread-0..code :12
Thread-0..code :11
Thread-0..code :10
Thread-0..code :9
Thread-0..code :8
Thread-0..code :7
Thread-0..code :6
Thread-0..code :5
Thread-0..code :4
Thread-0..code :3
Thread-0..code :2
Thread-0..code :1


我自己找到原因了{:soso_e106:}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

4 个回复

正序浏览
白良锦 发表于 2012-12-7 22:34
我也遇到过同样的问题,请问楼主是如何解决的?

这个程序现在是要的结果
当时有个地方忘了加synchronized了
你的程序可能跟我的不一样
顺着思路看看写的是不是符合
回复 使用道具 举报
我也遇到过同样的问题,请问楼主是如何解决的?
回复 使用道具 举报
synchronized ()定义的应该是对象,你已经定义了Object  就应该用 object 才对阿

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
太有才了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马