【问题标题】:How to allow multiple threads to access a random access file at the same time in Java [duplicate]如何在Java中允许多个线程同时访问一个随机访问文件[重复]
【发布时间】:2013-03-11 13:45:57
【问题描述】:

有没有一种方法可以允许多个线程同时对RandomAccessFile 执行读/写操作,即并发?我必须使用任何同步对象,还是可以不使用任何同步来完成?

【问题讨论】:

标签: java multithreading randomaccessfile


【解决方案1】:

正如 Erik 所说,必须有一个同步机制。否则,这将成为 Readers/Writers 问题。

如果您想加快速度,您可以同时进行多次读取,并且每当您需要写入时,停止新的读取请求,让现有请求完成,获取锁,写入文件,释放锁。

ReentrantReadWriteLock 可能会对您有所帮助。

【讨论】:

  • 如果 RandomFileAccess 不是绝对要求,还可以查看 java.nio.channels.FileChannel 在随机访问、文件(段)的共享/独占锁定方面提供了什么, 并通过直写直接在内存中映射。虽然,就像 RandomAccessFile 一样,FileChannel 在任何给定时间点只有一个位置,从而在某个时间点保持同步的需要。
  • 不是说文件只能通过一个FileChannel、文件描述符什么的来访问。
【解决方案2】:

随机存取文件的行为方式与随机存取存储器相同 - 它对各种数据竞争开放。因此,只要您不确定不同的线程在文件的不同区域工作,您绝对必须使用同步。

【讨论】:

    【解决方案3】:

    您必须使用某种同步方法。文件中只能有一个文件位置。 如果您尝试在没有同步的情况下进行并发访问,则行为充其量是不可预测的。

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多