在这种情况下会发生死锁吗?

时间:2010-09-09 19:07:13

标签: java multithreading synchronization deadlock

我是否正确地说在下列情况下应该发生僵局:

对象 P 调用对象 A 的同步方法,
调用对象 B 的同步方法,
调用对象 A 的同步方法。

对不起,如果它看起来很愚蠢,很可能就是这样。但那是为什么我在问。谢谢!

3 个答案:

答案 0 :(得分:9)

根据您提供的信息 - 不,不会发生死锁:

首先,你没有提到多个线程。单个线程不会导致死锁。但是我们假设你有多个线程。

因此,如果任何其他对象,来自不同的线程以相反的顺序调用其中一些方法,则可能发生死锁。

情况说明如下:Thread-1获取输入methodA所需的锁定,然后尝试输入methodB。如果在同一时刻另一个线程 - Thread-2调用methodB并获取其锁定,则尝试输入methodA,但Thread-1已经锁定,因此{{ 1}}等待。但是,Thread-2无法输入Thread-1,因为methodB具有锁定权限。他们永远等待(死锁)。

答案 1 :(得分:2)

没有。它是同一个线程,同步方法是可以重新输入的。

如果您从维基百科中获取定义:“死锁是指两个或更多竞争行为各自等待另一个完成的情况”。你只有一个动作(线程)。

答案 2 :(得分:2)

不,该线程已经锁定A,因此它不会死锁。一个线程永远不会争夺自己的锁。