Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这种情况下会发生死锁吗?_Java_Multithreading_Synchronization_Deadlock - Fatal编程技术网

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

Java 在这种情况下会发生死锁吗?,java,multithreading,synchronization,deadlock,Java,Multithreading,Synchronization,Deadlock,我所说的僵局应该在以下情况下发生,对吗 对象p调用对象a的同步方法, 调用对象B的同步方法, 调用对象a的同步方法的 对不起,如果我看起来很愚蠢,很可能是。但这就是我问的原因。谢谢 否。它是同一个线程,同步方法是可重传的 如果按照维基百科的定义:“僵局是指两个或多个相互竞争的动作都在等待对方完成的情况”。您只有一个操作(线程)。否,该线程将已在上持有锁,因此不会死锁。线程永远无法与自身争用锁。根据您提供的信息-不,死锁不会发生: 首先,您没有提到多线程。单个线程不能导致死锁。但是让我们假设您有多

我所说的僵局应该在以下情况下发生,对吗

对象p调用对象a的同步方法,
调用对象B的同步方法,
调用对象a的同步方法的


对不起,如果我看起来很愚蠢,很可能是。但这就是我问的原因。谢谢

否。它是同一个线程,同步方法是可重传的


如果按照维基百科的定义:“僵局是指两个或多个相互竞争的动作都在等待对方完成的情况”。您只有一个操作(线程)。

否,该线程将已在上持有锁,因此不会死锁。线程永远无法与自身争用锁。

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

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

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


对这种情况的解释如下:
Thread-1
获得进入
methodA
所需的锁,然后尝试进入
methodB
。如果在同一时刻,另一个线程-
thread-2
调用
methodB
并为其获取锁,则尝试输入
methodA
,但
thread-1
已经拥有锁,因此
thread-2
等待。但是,
Thread-1
无法进入
methodB
,因为
Thread-2
具有锁。它们会永远等待(死锁)。

实际上,这只适用于重入锁。在java中,同步块确实使用了重入锁,所以你没问题。为什么没有人说,NetBeans可以检查潜在的死锁情况!