【问题标题】:Deadlock in Try-catch-finally [closed]Try-catch-finally 中的死锁 [关闭]
【发布时间】:2014-07-24 13:27:41
【问题描述】:

我现在是移动设备,所以无法提供代码。 我在 try 块中启动了 3 个线程。(在 try 方法中,因为我正在使用缓冲区读取器?我还使用了一些不推荐使用的方法。这将确保死锁。 我的问题是为什么 finally 块现在没有执行?

【问题讨论】:

  • 如果死锁了,怎么继续到finally块?
  • 因为finally 在try 正常或突然完成时被调用。如果您在try 中设置了死锁或无限循环或其他任何内容,则finally 和catch 都不会被执行。
  • 代码仍在执行中......但它是一个死锁......等待资源......因此......
  • 不错的想法(y)。我想看看你的代码。登录后在此处发布。
  • 与其在您无法提供代码的时候提出问题,不如等到您可以提出更好的问题后再提出问题?基本上,如果没有看到任何代码,很难回答你的问题......

标签: java multithreading deadlock


【解决方案1】:

如果你在 try 块中死锁,finally 块将不会运行,因为 finally 块保证在 try 块之后运行(它不会结束)。打个比方,如果我在你从 1 数到无穷大之后向你支付 100 美元,我将永远不必支付你(因为你不能在有限时间内数到无穷大)。确保您在所有地方都以相同的顺序获取和释放锁。

【讨论】:

  • 哦,我从来没有读过那个 try 块需要结束。对不起,打扰了..如果我在 catch 块或 finally 块中做同样的事情怎么办?
  • @Jump3r 死锁就是死锁。它不会结束。
【解决方案2】:

如果try 块正常完成或发生错误,则将执行finally 块。如果try 块中存在死锁,则它不会到达finally 块。

【讨论】:

    【解决方案3】:

    finally 块只有在方法退出 try 块时才会执行。

    TRY-->catch-->finally(always) 这就是方法的执行方式。

    主要使用 Try-Catch-Finally 来捕获异常。 死锁不是例外。 如果有任何异常(Io 异常,因为您正在使用缓冲阅读器),那么只有您的 finally 和 catch 块将执行。(TRY 块已死锁)。

    finally 块保证在 try 块之后运行(由#Elliott 声明)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2011-08-27
      • 2019-01-07
      • 2014-11-27
      • 2014-09-30
      相关资源
      最近更新 更多