gpt4 book ai didi

java - 当其他线程正在执行该类的静态同步方法时,一个线程能否获取该类实例的锁?

转载 作者:行者123 更新时间:2023-12-01 18:42:45 25 4
gpt4 key购买 nike

假设我们有

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

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

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

最佳答案

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

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

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

关于java - 当其他线程正在执行该类的静态同步方法时,一个线程能否获取该类实例的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19230382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com