Possible Duplicate:
Java Synchronized Block for .class
我正在阅读 article关于同步。我对以下几点感到困惑,需要更多说明
用于同步块(synchronized block)。如何
synchronized (this) { // code }
不同于
synchronized (MyClass.class) { // code }
同步实例方法意味着线程必须获得实例的独占锁,而同步静态方法意味着线程必须获得整个类的锁(如果我错了,请纠正我)。因此,如果一个类具有三个方法,其中一个是静态同步的,那么如果一个线程在该方法上获得锁,那么这意味着它将在整个类上获得锁。那么这是否意味着其他两个也将被锁定,并且由于整个类都处于锁定状态,因此没有其他方法能够访问这两个方法?
最佳答案
MyClass.class
和 this
是不同的东西,它们是对不同对象的不同引用。
this
- 是对该类的这个特定实例的引用,并且
MyClass.class
- 是对 MyClass
描述对象的引用。
这些同步块(synchronized block)的不同之处在于,第一个将同步所有具体处理 MyClass
的 this 实例的线程,第二个将同步 all 线程独立于调用哪个方法的对象。
关于java - 同步(本)与同步(MyClass.class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14495776/