鹰翔宇空

学习和生活

BlogJava 首页 新随笔 联系 聚合 管理
  110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
对于synchronized的误解:“synchronized可以锁定函数或代码”。其实,synchronized锁定的不是函数和代码,对于instance函数,它锁定的仅仅是函数调用者的对象;对于static函数,则是class类。
class Test {
   public synchronized void a1(){   //函数
     System.out.println("aaaaaaa11111111");
   }
   public void a2(){   //对象本身的引用
       synchronized(this){
          //
             System.out.println("aaaaaaa2222222");
       }
   }
   public void a3(OtherObject obj){   /外部对象的引用
       synchronized(obj){
          //
             System.out.println("aaaaaaa33333333");
       }
   }
 
}
前两个通过synchronized获得lock其实都是一个,虽然不在一个地方使用,使用的方式也不一样,但是,两种方式获得的lock都会交给这个函数的对象(也就是this)。
第三个则由于是外部对象的引用,所以则是另一个lock。
posted on 2008-03-25 22:24 TrampEagle 阅读(977) 评论(0)  编辑  收藏 所属分类: 工作之余

只有注册用户登录后才能发表评论。


网站导航: