2

我有两个正在运行的线程调用几个方法(5 或 6),我在其中指定了同步块并仅使用一个对象来锁定它。只有一个同步点会有死锁的可能性吗?到目前为止,我还没有看到这样的情况,但仍然如此。感谢帮助。

4

4 回答 4

5

死锁描述了两个或多个线程永远被阻塞,互相等待的情况。

如果您的方法相互调用,则可能存在某种情况。通过文档中的示例查找更多详细信息。

于 2013-05-14T15:16:45.143 回答
4

如果您使用synchronized调用(即没有加入、等待、通知等),那么您可以“死锁”(在这里广泛使用该术语)的唯一方法是如果其中一个线程未能退出同步块(例如执行一个无限循环,不会从请求某些资源的调用中返回,等等)。所以,是的,这是可能的。

于 2013-05-14T23:12:03.187 回答
2

如果你只有一把锁来锁定共享资源,就不会发生死锁。您可以检查是否满足Coffman 的条件以识别潜在的死锁。

于 2013-05-14T15:39:33.453 回答
1

没有看到你的代码很难说。但正如你所描述的,你很可能很好。该链接讨论了避免死锁的方法。例如,从文章中引用以下引用,它说避免死锁的一种方法是检查“...嵌套同步块或从另一个同步方法调用一个同步方法或尝试锁定不同的对象”。

您应该注意的另一件事是活锁。当一个线程的动作响应另一个线程时,就会发生这种情况。

于 2013-05-14T15:32:32.537 回答