同步(这)与同步(MyClass.class)[重复](synchronize(this) vs s

2019-07-18 15:24发布

可能重复:
Java的synchronized块进行的.class

我读通过文章的同步。 我下面点困惑和需要进一步澄清

1)对于同步块。 怎么样

   synchronize(this){
    // code
   }

不同于

   synchronize(MyClass.class){
    //code
   }

2)同步实例方法意味着线程将获得对实例独占锁,而同步静态方法意味着线程必须获得对整个班级(纠正我,如果我错了)的锁。 所以,如果一个类有三种方法,其中之一是静态的,然后同步如果一个线程就获取该方法锁定,则意味着其将在全班获得锁。 这是否意味着另两个也将被锁定,并没有其他的方法将能够访问这两个方法为全班学生是有锁?

Answer 1:

MyClass.classthis是不同的东西,对不同对象的不同引用。

this -是引用类的特定这种情况下,和

MyClass.class -是参考MyClass描述对象。

该同步块的不同之处是,第一将同步,随着实例具体处理的所有线程MyClass ,而第二个将独立的哪个对象上被调用此方法同步所有线程。



Answer 2:

(获取关于锁的第一实施例this )是指在实例方法中使用,第二个(获取关于锁定class对象) -在static方法。

如果一个线程获得对锁MyClass.class ,其他线程必须等待进入的synchronized块static ,这个地块位于方法。同时,所有的线程将能够获得锁的这个特定实例类和执行实例方法。



文章来源: synchronize(this) vs synchronize(MyClass.class) [duplicate]