【问题标题】:java.util.logging.FileHandler and multithreadingjava.util.logging.FileHandler 和多线程
【发布时间】:2012-07-30 08:52:28
【问题描述】:

来自 java.util.logging 的 FileHandler 类为它正在写入的文件实现了某种锁定机制。但是我发现应用程序完成后文件系统中有一个 .lck 文件。有没有办法针对 .lck 文件或整个锁定机制自定义 FileHandler 类的行为?

编辑:似乎当我关闭 FileHandler 对象时 .lck 文件消失了。这是想要的行为吗?我以某种方式期望应该自动调用 FileHandler 的 close 方法...

【问题讨论】:

  • 我希望如果应用程序正常停止,lck 文件会消失,如果应用程序崩溃或被杀死,它会留在后面......

标签: java java.util.logging filehandler


【解决方案1】:

您可以使用 System.addShutdownHookFinalizer(Runnable r) 函数来激活线程,即关闭所有未关闭的线程。所以你将关闭 FileHandler 并且 .lck 文件将消失

【讨论】:

    【解决方案2】:

    似乎当我关闭 FileHandler 对象时,.lck 文件消失了。这是想要的行为吗?我以某种方式期望应该自动调用 FileHandler 的 close 方法

    LogManager 有一个关闭钩子,如果 FileHandler 在关闭时仍连接到记录器,它将关闭它。问题是记录器可能会受到垃圾收集。如果发生这种情况,则 FileHandler 永远不会关闭。这包含在以下错误中:

    1. JDK-8060132 Handlers configured on abstract nodes in logging.properties are not always properly closed.
    2. JDK-6274920: JDK logger holds strong reference to java.util.logging.Logger instances.

    强烈引用您的记录器,以免它们被垃圾收集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2013-03-01
      相关资源
      最近更新 更多