假设有以下代码:

class MyClass {
    synchronized void myMethod1() {
        //code
    }

    synchronized void myMethod2() {
        //code
    }
}

现在假设myMethod1()myMethod2()访问不同的数据;现在,如果有两个线程,则线程A仅调用myMethod1(),线程B仅调用myMethod2()

如果线程A正在执行myMethod1(),即使线程B不访问相同的数据并且没有理由,线程B也会阻塞在myMethod2()上等待吗?据我所知,同步方法对实例方法使用this对象的监视器,对静态函数使用MyClass.class对象的监视器。

最佳答案

您的所有假设都是正确的。如果没有共同的数据,则没有理由在方法级别进行同步。

10-04 17:07