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都有一个隐含的锁,楼主用的都是类的实例锁
线程可以通过两种方法来获得这个锁,就是楼主用的两种方法
------解决方案--------------------所有的锁锁的都是对象,不是方法,也不是代码块
------解决方案--------------------这样写也可以它们竞争的是同一把锁
------解决方案--------------------应该是一把锁,对象锁。。。。。
------解决方案--------------------是同一把锁
因为两个同步方法都是以当前对象为锁