我们有几个Java进程不时写入一个文本文件。这些不是同一虚拟机的线程,而是从命令行运行的单独java.exe
进程。这些进程写入同一个日志文件。我们使用了canWrite
...
while (!Log.canWrite()) {
System.out.println("File: " + LogPath + " is locked, waiting...");
Thread.sleep(2000);
}
......但似乎不起作用。我们收到以下错误:
The process cannot access the file because it is being used by another process) at java.io.FileOutputStream.openAppend(Native Method).
The Question:
在这样的sutiations中组织信号量的最佳做法是什么?如果解决方案不太耗费资源,那就太好了,从而对整体性能产生巨大影响。
答案 0 :(得分:3)
您可以使用FileChannel.lock()
同步对文件的访问权限。您可以从FileOutputStream
获取FileChannel
。
编辑但在你的情况下,它将解决一个扭曲的问题。您需要的是集中式日志记录服务器。有关详细信息,请参阅此问题:Centralised Java Logging