![](/img/trans.png)
[英]Calling outer class' method getContentPane() from inner Action class
[英]Calling outer class' syncronized method from inner class
我有一个本质上看起来像这样的程序
class Outer {
class Inner implements Runnable {
public void run() {
doSomething();
}
}
public synchronized void doSomething() {
//...
}
}
Inner.run()
调用doSomething()
时会获得哪个锁? 它是否与synchronized(Inner.this)
或synchronized(Outer.this)
?
非常感谢。
在run()
调用doSomething()
的接收者是Outer.this
。 因此, synchronized
将把监视器锁定在该表达式引用的对象上。
在计算方法调用表达式中的目标引用时 ,JLS说
否则,令
T
为方法是其成员的封闭类型声明,令n
为整数,使得T
为该类的第n'th
词法封闭类型声明,其声明立即包含方法调用。 目标引用是此n'th
第n'th
词汇包围的实例。
T
这里是Outer
,因为这是声明它的类。 n
为1,因为Outer
是Inner
的立即封闭类型声明。 因此,目标引用是this
第1个词法包围实例。 Outer.this
。
关于synchronized
方法 ,JLS说
对于实例方法,使用与
this
相关联的监视器(为其调用方法的对象)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.