如果我画一个图来表示所有可能的对阻塞函数(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/