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

如何组织将多个java进程写入一个文本文件的信号量,java,file-io,concurrency,semaphore,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 c

我们有几个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


编辑,但在您的情况下,这将解决一个接线问题。您需要的是一个集中式日志服务器。有关详细信息,请参阅此问题:

您可以使用同步对文件的访问。您可以从中获取
FileChannel


编辑,但在您的情况下,这将解决一个接线问题。您需要的是一个集中式日志服务器。有关更多详细信息,请参阅此问题:

我强烈建议为不同的进程使用不同的日志文件。或者您正在使用此文件在进程之间进行通信?不,我正在使用此文件作为所有进程的活动日志。如果我使用不同的文件,将很难将它们合并为一个整体…您可以使用将多个日志文件合并为一个以供查看。这是我创建的一个工具,不再受到积极支持,但应该可以正常工作。也许现在有更好的工具。Wim,谢谢,我会看看。我强烈建议为不同的进程使用不同的日志文件。或者您正在使用此文件在进程之间进行通信?不,我正在使用此文件作为所有进程的活动日志。如果我使用不同的文件,将很难将它们合并为一个整体…您可以使用将多个日志文件合并为一个以供查看。这是我创建的一个工具,不再受到积极支持,但应该可以正常工作。也许现在有更好的工具。Wim,谢谢,我会看一看。集中式Java日志看起来太严肃了,不能在这里使用它。简要说明我们需要信号量的原因:我们同时运行四个基于java的Fitnesse自动测试,并在一个文本文件中跟踪结果。我们可以写入4个不同的文件,但很难合并它们。在这里,使用SoccarAppender的集中式Java日志记录看起来太复杂了…@Racoon:搞乱文件锁几乎肯定会让你头疼。这些过程是持续运行还是全部完成并生成4个日志文件?如果他们完成了,你需要分析日志,那么我会合并文件,这会容易得多。目前,他们正在同一个文件中编写。我所说的合并是指按时间顺序合并。很难按时间顺序合并来自4个不同文件的记录。非常奇怪的是,Java没有内置的功能来写入同一个文件而不会让人头痛。我认为这是许多开发人员所需要的典型东西…@Racoon:这些日志文件中没有时间戳吗?我可以自己在这些文件中写时间戳。您是否建议将文件分开,然后合并?奇怪的是,没有人认真推荐使用Java内置工具。集中式Java日志记录看起来太严肃了,无法在这里使用它。简要说明我们需要信号量的原因:我们同时运行四个基于java的Fitnesse自动测试,并在一个文本文件中跟踪结果。我们可以写入4个不同的文件,但很难合并它们。在这里,使用SoccarAppender的集中式Java日志记录看起来太复杂了…@Racoon:搞乱文件锁几乎肯定会让你头疼。这些过程是持续运行还是全部完成并生成4个日志文件?如果他们完成了,你需要分析日志,那么我会合并文件,这会容易得多。目前,他们正在同一个文件中编写。我所说的合并是指按时间顺序合并。很难按时间顺序合并来自4个不同文件的记录。非常奇怪的是,Java没有内置的功能来写入同一个文件而不会让人头痛。我认为这是许多开发人员所需要的典型东西…@Racoon:这些日志文件中没有时间戳吗?我可以自己在这些文件中写时间戳。您是否建议将文件分开,然后合并?奇怪的是,没有人认真推荐使用Java内置工具。