同步方法被锁定时访问类的非同步方法

时间:2012-06-24 11:32:58

标签: java multithreading synchronized

我在类中有一个synchronized方法和一个非同步方法,我有一个线程可以获得对synchronized方法的锁定。

我的问题是:在这种情况下,其他线程可以访问类的非同步方法吗?

3 个答案:

答案 0 :(得分:4)

是。如果未声明synchronized

,则该方法仍可供其他线程访问

答案 1 :(得分:2)

是的,其他线程可以访问非同步方法,但是请记住其他线程无法访问其他同步方法,因为每个对象只有一个锁而不是每个方法。

答案 2 :(得分:1)

同步方法只是使用当前实例作为监视器(锁定)的同步块的语法快捷方式:

public synchronized void abc() {
    //something to do
}

相当于

public void abc() {
    synchronized(this) {
        //something to do
    }
}

要运行同步块,线程必须首先获取相应的监视器,在本例中为this,这样可以保证不会有多个线程同时运行该块。

现在this用作监视器的事实并不能保证同步块之外的任何内容。换句话说,如果您的对象包含非同步方法,则它们可以由多个线程并发运行,因为它们不要求正在运行的线程获取this监视器。