syncd(a) 是否还可以防止 a 的同步方法并发执行?



我的类充当同步守卫。它通过同步其方法来做到这一点。该课程还具有一个定期的侦听器,可以由其他线程调用。我想知道是否在同步块中使用此对象是否也可以防止同步方法执行。这是一个示例:

public class A {
    MyStatefulObject o = new MyStatefulObject();
    public synchronized void doSomething(int a) {
        o.someMethod(a); // o.someMethod cannot be executed concurrently
    }
    public Listener listener = new Listener() {
        @Override
        public void interfaceMethod() {
            synchronized(A.this) {
                A.this.o.someMethod(500); // Is this safe?
            }
        }
    }
}

如果2个线程具有A的相同实例,一个线程调用listener.interfaceMethod(),另一个线程在同一实例上调用doSomething(),直到interfaceMethod()完成的synchronized块为止。

最新更新