synchronized(a)是否也可以防止并发执行同步方法?

时间:2017-09-22 13:06:21

标签: java

我有一个充当同步保护的类。它通过同步其方法来实现。此类还有一个可由其他线程调用的定期侦听器。我想知道在同步块中使用此对象是否也会阻止同步方法执行。这是一个例子:

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?
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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