我是否正确地说在下列情况下应该发生僵局:
对象 P 调用对象 A 的同步方法,
调用对象 B 的同步方法,
调用对象 A 的同步方法。
对不起,如果它看起来很愚蠢,很可能就是这样。但那是为什么我在问。谢谢!
答案 0 :(得分:9)
根据您提供的信息 - 不,不会发生死锁:
首先,你没有提到多个线程。单个线程不会导致死锁。但是我们假设你有多个线程。
因此,如果任何其他对象,来自不同的线程以相反的顺序调用其中一些方法,则可能发生死锁。
情况说明如下:Thread-1
获取输入methodA
所需的锁定,然后尝试输入methodB
。如果在同一时刻另一个线程 - Thread-2
调用methodB
并获取其锁定,则尝试输入methodA
,但Thread-1
已经锁定,因此{{ 1}}等待。但是,Thread-2
无法输入Thread-1
,因为methodB
具有锁定权限。他们永远等待(死锁)。
答案 1 :(得分:2)
没有。它是同一个线程,同步方法是可以重新输入的。
如果您从维基百科中获取定义:“死锁是指两个或更多竞争行为各自等待另一个完成的情况”。你只有一个动作(线程)。
答案 2 :(得分:2)
不,该线程已经锁定A,因此它不会死锁。一个线程永远不会争夺自己的锁。