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

标签 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).

问题:

在此类问题中组织信号量的最佳实践是什么?如果解决方案不会太消耗资源,从而极大地影响总体性能,那就太好了。

最佳答案

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

编辑但就你而言,它将解决一个扭曲问题。您需要的是一个集中式日志服务器。有关更多详细信息,请参阅此问题:Centralised Java Logging

关于java - 如何组织信号量以将多个 java 进程写入一个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14262051/

相关文章:

java - CompletableFuture 如何知道任务是独立的?

java - org.apache.poi 中的异常

java - 在 Gradle 和 Maven 之间共享模块

java - 如何在Android上删除一个文件夹中的所有文件和文件夹

C++11:确保一次写入多次读取的定义语义?

javascript - 轻松解决冲突

java - 字符集无法从 java 中的 dsv 文件读取 €(欧元符号)

java - 骰子滚动模拟

c - 使用 sprintf 的读写系统调用

java - Java 中是否可以进行这种类型的搜索