我有两个正在运行的线程调用几个方法(5或6),其中我在其中指定了synchronized块并且只使用一个对象来锁定它。只有一个同步点是否有任何死锁的可能性?到目前为止,我还没有看到过这样的情况。谢谢你的帮助。
答案 0 :(得分:5)
死锁描述了两个或多个线程被阻止的情况 永远,等待对方。
如果你的方法相互调用,可能会出现这种情况。通过documentation中的示例查找更多详细信息。
答案 1 :(得分:4)
如果你仅使用synchronized
电话(即没有加入,等待,通知等),那么你可以“死锁”的唯一方法(在这里使用广泛的术语)是如果其中一个线程未能退出同步块(例如,执行无限循环,则不会从调用返回请求某些资源等)。所以,是的,这是可能的。
答案 2 :(得分:2)
如果您只有一个锁用于锁定共享资源,则不会发生死锁。您可以检查是否符合Coffman's conditions以确定潜在的死锁。
答案 3 :(得分:1)
没有看到您的代码,很难说。但正如你所描述的那样,你最有可能。 This link讨论了避免僵局的方法。例如,从文章中引用以下引用,它说避免死锁的一种方法是检查“...嵌套的同步块或从其他方法调用一个同步方法或试图锁定不同的对象”。
您应该注意的另一件事是a live lock。当一个线程动作响应另一个线程时,会发生这种情况。