Joh*_*0te 3 java inheritance multithreading locking monitor
背景:
我正在阅读Java Concurrency in Practice,清单2.7包含以下代码.该示例指出此代码仅起作用,因为监视器锁是可重入的.
我原本以为当你调用super.doSomething()它时它会获得对基类对象的锁定而不是派生类对象.这意味着这种情况不需要重新进入.说到这一点,我也明白基类和派生类方法都可以改变基类字段,所以它们使用的锁必须是通用的(意思是我显然是错的).
题:
在继承层次结构中,每个对象是否存在一个"内在"锁定,或者仅在层次结构中与最派生对象(或最少派生对象)关联的一个"内部"锁定?
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
我原本以为当你调用super.doSomething()时它会获得对基类对象的锁定而不是派生类对象.
这里只有一个目的-如果你创建的实例LoggingWidget,这里只有一个创建的对象,从各个领域LoggingWidget,并也都从田里Widget.它不像它创建一个实例LoggingWidget引用的实例Widget.
只有一个对象,因此只有一个锁,无论你在哪里同步.
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |