在阅读《Java并发实践》一书时,遇到了这段代码,其中“fromAccount”和“toAccount”对象被依次锁定,以防止动态锁顺序死锁。
public void transferMoney(Account fromAccount,Account toAccount) {
**synchronized (fromAccount) {**
**synchronized (toAccount) {**
........
}
}
}
我对为什么需要这种锁定顺序感到困惑。如果我们只是想确保两个对象同时被锁定,那么如果存在一个常规的同步块,在该块内访问fromAccount和toAccount对象,那么不是会得到相同的效果吗?我确定我在这里忽略了一些基本概念。谢谢你的帮助。
public void transferMoney(Account fromAccount,Account toAccount) {
synchronized (this) {
fromAccount.someMethod();
toAccount.someMethod();
}
}
fromAccount
对象中执行某些操作,它将不会被锁定。 - RealSkeptic