日期:2014-05-20  浏览次数:20808 次

synchronized 方法 和 synchronized代码块 竞争的是同一把锁吗?
如果一个类如下
class   A   {
private   synchronized   void   fun1()   {

}

private   synchronized   void   fun2()   {

}
}
我的理解是这两个同步的方法竞争的是同一把锁this,在访问其中的一个方法的过程中,另一个方法是不能访问的,我说的访问是objectName.的形式

如果是这样的形式

class   A   {
private   synchronized   void   fun1()   {

}

private     void   fun2()   {
                                synchronized(this){
                                         
                                }
}
}

这样能达到相同的效果吗,也就是说,在方法签名中声明为synchronized   和   在代码块中竞争this锁是同一把锁吗,谢谢,欢迎大家发表意见。

------解决方案--------------------
两者同效。
------解决方案--------------------
这两者作用一样的
从JDK 1.0开始,每个Object都有一个隐含的锁,楼主用的都是类的实例锁
线程可以通过两种方法来获得这个锁,就是楼主用的两种方法
------解决方案--------------------
所有的锁锁的都是对象,不是方法,也不是代码块
------解决方案--------------------
这样写也可以它们竞争的是同一把锁
------解决方案--------------------
应该是一把锁,对象锁。。。。。
------解决方案--------------------
是同一把锁
因为两个同步方法都是以当前对象为锁