我们有几个 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).
问题:
在此类问题中组织信号量的最佳实践是什么?如果解决方案不会太消耗资源,从而极大地影响总体性能,那就太好了。
最佳答案
您可以使用 FileChannel.lock()
同步对文件的访问。您可以从FileOutputStream
获取FileChannel
.
编辑但就你而言,它将解决一个扭曲问题。您需要的是一个集中式日志服务器。有关更多详细信息,请参阅此问题:Centralised Java Logging
关于java - 如何组织信号量以将多个 java 进程写入一个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14262051/