繁体   English   中英

清理Java 8中的锁(.lck)文件

[英]Cleaning up lock (.lck) files in Java 8

看来Java 8改变了锁文件的处理方式,这使我积累了很多.lck文件。

我想通过在我的应用程序中添加一些代码以在每次运行时清除输出目录中的锁定文件来解决此问题。 Java但是不会打开此文件,这意味着如果我打开应用程序的第二个实例(常见用例),那么这将导致它删除锁定文件并在尝试与其他应用程序重用相同的日志文件时立即挂起。实例。

有没有人以更优雅的方式减轻这种压力?


确认这是至少8u25的错误。 错误的行为在oracle 8u40 JRE中消失了。

Java 8中的java.util.logging.FileHandler是否损坏? 更新您的JDK 8以更新40或更高版本 ,其中包含针对JDK-8048020修复程序

您应该期望在FileHandler打开时看到锁定文件。 如果您看到它们在VM退出后仍然存在,那是因为FileHandler未关闭,VM在运行处理程序关闭挂钩时停止或崩溃,或者是在尝试删除它们时发生了I / O异常。

在实现FileHandler使用的FileLock时,您正在运行的平台也扮演着角色。 FileLock文档附带以下警告:

锁定是否实际阻止其他程序访问锁定区域的内容取决于系统,因此未指定。 某些系统的本机文件锁定功能仅是建议性的,意味着程序必须协作遵守已知的锁定协议才能保证数据完整性。 在其他系统上,本机文件锁定是强制性的,这意味着,如果一个程序锁定了文件的某个区域,则实际上会阻止其他程序以违反该锁定的方式访问该区域。 在其他系统上,本机文件锁定是建议性的还是强制性的,则可以按文件配置。 为确保跨平台的行为一致且正确,强烈建议将此API提供的锁当作咨询锁使用。

这意味着FileHandler在不同平台上可以具有不同的锁定行为。

与锁定文件也有关的是记录器的垃圾回收,它们不会关闭附加的处理程序。 JDK-8060132涵盖了这些问题在logging.properties中的抽象节点上配置的处理程序并非总是正确关闭的,并且JDK-6274920: JDK logger强烈引用java.util.logging.Logger实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM