如果一个类如下
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锁是同一把锁吗,谢谢,欢迎大家发表意见。
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都有一个隐含的锁,楼主用的都是类的实例锁
线程可以通过两种方法来获得这个锁,就是楼主用的两种方法
比如说
A a = new A();如果我调用a.fun1();或者a.fun2();
这两个方法竞争的应该就是这个调用的a吧
竞争的锁应该是调用者吧
比如说
A a = new A();如果我调用a.fun1();或者a.fun2();
这两个方法竞争的应该就是这个调用的a吧
=======================
就你的声明来说共享资源是实例a中的相关参数...