java - 无循环死锁

标签 java synchronization deadlock petri-net

如果我画一个图来表示所有可能的对阻塞函数(java同步方法)的调用,并且我在这个图中没有任何循环,我可以确定死锁是不可能的吗? Petri 网不是这样工作的吗?

我不是在寻找这样的答案:使用一些怪物框架等等。

我想使用同步方法处理多线程。

EDIT1:尖箭头表示一个类是否调用另一个类的任何同步方法 编辑2:klick @这里的例子,显示了一个循环

最佳答案

不,这还不够。假设你必须有线程:A和B。A调用对象o1的方法m1,该方法调用对象o2的方法m1。线程B调用对象o2的方法m2,对象o2又调用对象o1的方法m2。假设所有方法都是同步的。现在,A和B同时执行,导致死锁。不过,方法之间不存在循环调用关系。

这是家庭作业吗?

即使您对类进行了编辑,但这还不够,因为您可以通过非同步方法调用来关闭循环。

关于java - 无循环死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5511229/

相关文章:

c# - 帮助从 C# 中的单元测试进行同步

c - 锁定顺序或调度问题

java - 应用带有 View 的选项卡而不是单独的 Activity

java - 写入 C :\Program Files from Java program

java - 如何使 log4j 也写入控制台

python - 在 Python 中,如何将磁盘上的 JSON 文件绑定(bind)到进程中的字典?

java - JAX-RS - 同步和线程

mysql - Innodb更新锁定

sql-server - 了解 SQL Server 中的六锁

java - 错误:程序类型已存在:com.google.firebase.iid.FirebaseInstanceId