2012-07-30 16 views
1

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

编辑:看来,当我关闭FileHandler对象.lck文件消失。这是想要的行为?我不知何故预计FileHandler的close方法应该被自动调用...

+0

我希望如果应用程序正常停止,并且如果应用程序崩溃或被终止,它会一直处于后面,lck文件将消失... – centic 2012-08-28 12:19:49

回答

0

你可以使用System.addShutdownHookFinalizer(Runnable r)函数来激活线程,这个工作就是关闭所有未关闭的东西。所以你将关闭FileHandler并且.lck文件将会消失

0

看来,当我关闭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.

保持很强的参考你的记录器,以便它们不是垃圾收集。