如果一个类如下
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锁是同一把锁吗,谢谢,欢迎大家发表意见。

解决方案 »

  1.   

    这两者作用一样的
    从JDK 1.0开始,每个Object都有一个隐含的锁,楼主用的都是类的实例锁
    线程可以通过两种方法来获得这个锁,就是楼主用的两种方法
      

  2.   

    竞争的锁应该是调用者吧
    比如说
    A a = new A();如果我调用a.fun1();或者a.fun2();
    这两个方法竞争的应该就是这个调用的a吧
      

  3.   

    这两种方法表示同步是一样的....同一把锁区别在于..如果方法里所有代码块都是同步内容的话直接赋于方法以同步参数..如果不是所有代码都是同步内容就用同步代码块的方法引用同步锁的机制在于该资源是共享资源,并防止该资源被多个线程同时修改...==========
    竞争的锁应该是调用者吧
    比如说
    A a = new A();如果我调用a.fun1();或者a.fun2();
    这两个方法竞争的应该就是这个调用的a吧
    =======================
    就你的声明来说共享资源是实例a中的相关参数...