如何组织信号量以将多个java进程写入一个文本文件

时间:2013-01-10 16:02:47

标签: java file-io concurrency semaphore

我们有几个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中组织信号量的最佳做法是什么?如果解决方案不太耗费资源,那就太好了,从而对整体性能产生巨大影响。

1 个答案:

答案 0 :(得分:3)

您可以使用FileChannel.lock()同步对文件的访问权限。您可以从FileOutputStream获取FileChannel

编辑但在你的情况下,它将解决一个扭曲的问题。您需要的是集中式日志记录服务器。有关详细信息,请参阅此问题:Centralised Java Logging