sync(this)vs syncize(MyClass.class)


问题内容

我正在阅读有关同步的文章。我对以下几点感到困惑,需要进一步说明

1)用于同步块。怎么样

   synchronize(this){
    // code
   }

不同于

   synchronize(MyClass.class){
    //code
   }

2)同步实例方法意味着线程将必须获得实例的排他锁,而同步静态方法意味着线程将必须获得整个类的锁(如果我错了,请纠正我)。因此,如果一个类具有三个方法,并且其中一个是静态同步的,则如果线程获取该方法的锁,则意味着它将获取整个类的锁。那么这是否意味着其他两个方法也将被锁定,并且当整个类都处于锁定状态时,其他方法将无法访问这两个方法?


问题答案:

MyClass.class并且this是不同的事物,它们是对不同对象的不同引用。

this -是对该类特定实例的引用,并且

MyClass.class-是对MyClass描述对象的引用。

这些同步块中,第一同步将与具体处理的所有线程不同 这个 实例MyClass,而第二个将同步 所有 线程独立哪个对象的在其上调用的方法。