假设我们有
class A {
void m1() {
synchronized (this) {
}
blah blah blah
synchronized (this) {
}
}
}
我的疑问是执行等等等等,当前正在执行的线程中有对象o释放锁定,此时如果其他具有对象o的线程获取锁定,则会出现死锁。那么我们怎么能说我们应该尝试使用synchronized块而不是synchronized方法?
假设线程t1执行获取类级锁的静态同步方法,其他线程是否可以获取此类实例的锁以执行其他同步方法?
答案 0 :(得分:2)
是。对象的同步完全独立于对象类的Class<?>
对象上的同步。
答案 1 :(得分:2)
执行“blah blah blah”时,当前正在执行的线程没有任何锁定。另一个线程可能获取对象的锁定,但这不会导致死锁。第一个线程将直接阻塞,直到另一个线程释放锁。
当线程A拥有锁1时会发生死锁,但需要锁2,而线程B拥有锁2但需要锁1.这种情况在您的情况下不会发生。
类级锁是与对象实例上的锁不同的锁。因此,类级别锁定不会干扰在对象上执行其他同步方法的另一个线程。