java静态同步方法

时间:2012-09-19 10:06:13

标签: java multithreading static synchronized

当两个线程同时使用不同的实例调用静态同步方法时会发生什么?可能吗?对象锁用于非静态同步方法,但是什么类型的锁用于静态同步方法?

4 个答案:

答案 0 :(得分:6)

与在实现该方法的Class对象上进行同步相同,所以是的,这是可能的,是的,该机制有效地忽略了调用该方法的实例:

class Foo {
    private static synchronized doSomething() {
        // Synchronized code
    }
}

是写这个的捷径:

class Foo {
    private static doSomething() {
        synchronized(Foo.class) {
            // Synchronized code
        }
    }
}

答案 1 :(得分:6)

有可能。

线程锁定了类的Class对象,就像在MyClass.class上一样。

请参阅JLS, Section 8.4.3.6. synchronized Methods

  

<强> 8.4.3.6。同步方法

     

同步方法在执行之前获取监视器(第17.1节)。

     

对于类(静态)方法,与类关联的监视器   使用方法类的对象。

答案 2 :(得分:0)

静态同步方法在java.lang.Class类型的实例上使用锁。也就是说,每个可访问类在运行时由类型为Class的对象表示,该对象由静态同步方法使用。

答案 3 :(得分:0)

使用静态锁定时,将忽略对象。锁是在类而不是对象上获取的。