Java 当另一个线程正在执行该类的静态同步方法时,该线程是否可以获得该类实例的锁?

Java 当另一个线程正在执行该类的静态同步方法时,该线程是否可以获得该类实例的锁?,java,multithreading,synchronization,synchronized,Java,Multithreading,Synchronization,Synchronized,假设我们有 class A { void m1() { synchronized (this) { } blah blah blah synchronized (this) { } } } 我的疑问是,在执行blah-blah-blah时,当前使用对象o释放锁执行的线程,此时如果使用对象o的其他线程获得锁,将出现死锁。那么,我们怎么能说我们应该尝试使用synchronized块而不是synchron

假设我们有

class A {
    void m1() {
        synchronized (this) {
        }
        blah blah blah
        synchronized (this) {
        }
    }
}
我的疑问是,在执行blah-blah-blah时,当前使用对象o释放锁执行的线程,此时如果使用对象o的其他线程获得锁,将出现死锁。那么,我们怎么能说我们应该尝试使用synchronized块而不是synchronized方法呢


假设线程t1执行的静态同步方法获得了类级锁,那么其他线程能否获得该类实例的锁以执行其他同步方法?

是。对象上的同步完全独立于对象类的
类上的同步。

是。对象上的同步完全独立于对象类的
类上的同步。

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

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

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

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

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


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

+1需要担心的一件事是,如果存在类级锁和实例锁,则根据这两个锁的锁顺序,可能会出现死锁。+1需要担心的一件事是,如果存在类级锁和实例锁实例锁然后根据这两个锁的锁顺序,可能会出现死锁。