0

假设我们有

class A {
    void m1() {
        synchronized (this) {
        }
        blah blah blah
        synchronized (this) {
        }
    }
}

我的疑问是在执行blah blah blah时,当前正在执行的object o线程释放锁,此时如果其他object o线程获取锁,就会出现死锁。那么我们怎么能说我们应该尝试使用同步块而不是同步方法呢?

假设线程 t1 执行静态同步方法获取类级锁,其他线程能否获取该类实例的锁来执行其他同步方法?

4

2 回答 2

2

在执行“blah blah blah”时,当前正在执行的线程不拥有任何锁。另一个线程可以获取对象上的锁,但这不会导致死锁。第一个线程将简单地阻塞,直到另一个线程释放锁。

当线程 A 拥有锁 1 但需要锁 2 而线程 B 拥有锁 2 但需要锁 1 时会发生死锁。在您的情况下不会发生这种情况。

类级锁是与对象实例上的锁不同的锁。因此,类级别的锁不会干扰另一个线程在对象上执行其他同步方法。

于 2013-10-07T16:55:14.440 回答
2

是的。对象上的同步完全独立于Class<?>对象类的对象上的同步。

于 2013-10-07T16:53:30.670 回答