java.util.logging.FileHandler和多线程

时间:2012-07-30 08:52:28

标签: java java.util.logging filehandler

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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.
  3. 强烈引用您的记录器,这样就不会对它们进行垃圾回收。