【问题标题】:Does finally() get called when the stop button is pressed in eclipse?在eclipse中按下停止按钮时是否会调用finally()?
【发布时间】:2014-12-15 21:28:20
【问题描述】:

我确定这个问题之前在这里被问过,但是在谷歌和这里搜索之后我找不到任何东西。

这是我的情况,我有多个线程写入文件,还有一个主线程创建打印写入器并处理创建文件并在 try/catch 循环中的 finally 块内关闭打印写入器。当我在 Eclipse 中运行应用程序时,我会按下停止/终止按钮,并且该文件没有写入任何内容。我想确保我在这里所做的一切都是正确的,或者是否有更好的方法来处理在执行终止时关闭打印编写器。哎呀,如果有更好的方法来处理写入文件的多个线程,我很欢迎这个建议(我现在在多线程编程方面非常糟糕)。

【问题讨论】:

  • 在开发过程中,您也许可以在每次写入后刷新。
  • 一些见解(关于最终终止):stackoverflow.com/questions/1410951/…
  • @aioobe 没想到。只是将它用于个人测试,而不是用于生产,所以我会尝试。
  • 我猜不是,尤其是您对问题的描述。可能 Eclipse 只是使用(不安全,已弃用)Thread.stop() 来核对您的应用程序,因此之后根本不会执行任何代码。
  • @TJ- 啊哈!这可能会有所帮助,我想我无法正确表达它。但是我仍然想要一些更好的多线程建议,所以我应该编辑我的问题以反映这一点吗?

标签: java eclipse multithreading printwriter


【解决方案1】:

finally 没有被执行的情况很少见。 if 之一可以是:System.exit(0). 使用 finally 假定 finally 块中的语句总是被执行。

由于您的问题,请确保您的线程尚未执行您的 finally 块:确保在需要时使用同步 - 始终使用单元测试进行检查。

【讨论】:

    【解决方案2】:

    在调用 finally 块中的 flush()close() 方法之前,您需要将主线程加入其他线程,这样您的主线程将等待其他线程完成对文件的写入,然后再关闭它.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      相关资源
      最近更新 更多