Java 在这种情况下会发生死锁吗?
我所说的僵局应该在以下情况下发生,对吗 对象p调用对象a的同步方法,Java 在这种情况下会发生死锁吗?,java,multithreading,synchronization,deadlock,Java,Multithreading,Synchronization,Deadlock,我所说的僵局应该在以下情况下发生,对吗 对象p调用对象a的同步方法, 调用对象B的同步方法, 调用对象a的同步方法的 对不起,如果我看起来很愚蠢,很可能是。但这就是我问的原因。谢谢 否。它是同一个线程,同步方法是可重传的 如果按照维基百科的定义:“僵局是指两个或多个相互竞争的动作都在等待对方完成的情况”。您只有一个操作(线程)。否,该线程将已在上持有锁,因此不会死锁。线程永远无法与自身争用锁。根据您提供的信息-不,死锁不会发生: 首先,您没有提到多线程。单个线程不能导致死锁。但是让我们假设您有多
调用对象B的同步方法,
调用对象a的同步方法的
对不起,如果我看起来很愚蠢,很可能是。但这就是我问的原因。谢谢 否。它是同一个线程,同步方法是可重传的
如果按照维基百科的定义:“僵局是指两个或多个相互竞争的动作都在等待对方完成的情况”。您只有一个操作(线程)。否,该线程将已在上持有锁,因此不会死锁。线程永远无法与自身争用锁。根据您提供的信息-不,死锁不会发生: 首先,您没有提到多线程。单个线程不能导致死锁。但是让我们假设您有多个线程 因此,如果来自不同线程的任何其他对象以相反顺序调用其中一些方法,则可能发生死锁
对这种情况的解释如下:
Thread-1
获得进入methodA
所需的锁,然后尝试进入methodB
。如果在同一时刻,另一个线程-thread-2
调用methodB
并为其获取锁,则尝试输入methodA
,但thread-1
已经拥有锁,因此thread-2
等待。但是,Thread-1
无法进入methodB
,因为Thread-2
具有锁。它们会永远等待(死锁)。实际上,这只适用于重入锁。在java中,同步块确实使用了重入锁,所以你没问题。为什么没有人说,NetBeans可以检查潜在的死锁情况!