繁体   English   中英

从内部类调用外部类的同步方法

[英]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'thn'th词汇包围的实例。

T这里是Outer ,因为这是声明它的类。 n为1,因为OuterInner的立即封闭类型声明。 因此,目标引用是this第1个词法包围实例。 Outer.this

关于synchronized方法 ,JLS说

对于实例方法,使用与this相关联的监视器(为其调用方法的对象)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM