java - 这种情况下会出现死锁吗?

标签 java multithreading synchronization deadlock

我说的对吗,在以下情况下应该会发生死锁:

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

抱歉,如果我看起来很愚蠢,很可能确实如此。但这就是我问的原因。谢谢!

最佳答案

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

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

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

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

关于java - 这种情况下会出现死锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3679736/

相关文章:

c - 生产者/消费者 Mesa 与 Hoare 语义

Android/Web 应用程序离线/在线数据库设置。在两个平台上创建项目

java - 按下按钮时循环播放声音

javascript - 如何通过请求映射修复 thymeleaf 错误?

java - 获取空值

java - 更改 sha 256 更新的顺序更改值

java - Android 线程中的全局变量

python - 如何从另一个线程上调用的回调返回主线程

ruby - 从另一个线程在 ruby​​ 的主线程上执行代码?

multithreading - go 例程子集上的 WaitGroup