需要注意的重要一点是,锁定的不是 方法 而是 对象实例 。
当您呼叫时
alphonse.bow(gaston),它将尝试获取锁定
alphonse。拥有锁后,它将打印一条消息,然后调用
gaston.bowBack(alphonse)。此时,它尝试获取对的锁定
gaston。一旦拥有了锁,它将打印一条消息,然后释放该锁,最后释放该锁
alphonse。
在死锁中,锁的获取顺序使得任何一个线程都无法继续进行。
- 线程1:获得锁定
alphonse
- 线程2:获得锁定
gaston
- 线程1:打印消息
- 线程1:尝试获取锁
gaston
-不能,因为线程2已经拥有它。 - 线程2:打印消息
- 线程2:尝试获取锁
alphonse
-不能,因为线程1已经拥有它。



