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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-7-3 20:14  /  954 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test implements Runnable
  2. {
  3.         private boolean flag;
  4.         Test(boolean flag)
  5.         {
  6.                 this.flag=flag;       
  7.         }
  8.        
  9.         public void run()
  10.         {
  11.                 if(flag)
  12.                 {
  13.                        
  14.                         synchronized(MyLock.locka)
  15.                         {
  16.                                 System.ou("if locka");t.println
  17.                                 synchronized(MyLock.lockb)
  18.                                 {
  19.                                  System.out.println("if lockb");       
  20.                                 }       
  21.                         }       
  22.                 }
  23.                 else
  24.                 {
  25.                        
  26.                         synchronized(MyLock.lockb)
  27.                         {
  28.                                 System.out.println("else lockb");
  29.                                 synchronized(MyLock.locka)
  30.                                 {
  31.                                  System.out.println("else locka");
  32.                                 }       
  33.                         }               
  34.                 }
  35.         }
  36. }

  37. class MyLock
  38. {
  39.         static Object locka=new Object();
  40.         static Object lockb=new Object();       
  41. }
  42. class DeadLockTest
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 Thread t1=new Thread(new Test(true));
  47.                 Thread t2=new Thread(new Test(false));
  48.                 t1.start();
  49.                 t2.start();
  50.         }
  51. }
复制代码
大家好  关于这段代码我有2点疑惑。
第一个问题就是static可以修饰成员变量和成员函数。这句话Object locka=new Object();为什么可以被static修饰呀?
第二个问题就是加上了静态以后就多了一种调用方式,就是可以直接被类名所调用,调用的是方法,而locka和lockb都
是对象的引用,为什么还可以被类名调用呢?难道我学死了!麻烦仁兄们帮小弟解答下疑惑。谢谢了。

0 个回复

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