【问题标题】:Concurrent read and write from different programs in Java [duplicate]从Java中的不同程序并发读写[重复]
【发布时间】:2019-09-02 10:01:00
【问题描述】:

我正在编写两个通过文本文件进行通信的程序。第一个程序写入文件,第二个程序读取文件。但是,当 reader 程序尝试从文件中读取而 writer 仍在写入并读取不一致的数据时,就会出现问题。有没有办法同步两个不同 JVM 的读/写?

【问题讨论】:

  • 这种方法有什么原因吗?你使用文本文件吗?
  • 是的,我必须使用文本文件。
  • 你能告诉使用为什么吗?为什么不是插座?为什么不是消息传递库?
  • 这不取决于我。作为更大项目的一部分,我被分配了这项特定任务。
  • 您可以使用文件锁 (stackoverflow.com/questions/128038/…) 持有锁的 JVM 是有权访问文件的那个。其他 JVM 会定期轮询文件,尝试获取锁。

标签: java concurrency


【解决方案1】:

一个常用的简单解决方案:

  1. 将文本写入一个与读者期望的名称不同的文件。例如,如果预期的文件名是 abc.txt,则写入一个名为 abc.txt.temp 的文件。
  2. 写入完成后,重命名文件到它的预期名称。在大多数(尽管这取决于平台)文件系统上,同一目录中文件的重命名是原子的 - 它会立即发生。所以在这种情况下,重命名是从abc.txt.tmpabc.txt。您可以使用java.io.File.renameTojava.nio.Files.move 方法进行重命名。

然后,读者将只能在abc.txt 中看到完整写入的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2016-12-10
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多