【发布时间】:2009-07-15 20:09:35
【问题描述】:
我正在用 Java 构建一个系统,它必须将文件的一个子集复制到另一个文件中(不一定要复制到文件的开头)。 IE。我有以下参数:
File srcFile, File dstFile, long srcFileOffset, long dstFileOffset, long length
多个线程可能同时从同一个源文件读取并写入同一个目标文件(尽管具有不同的偏移量),所以我需要该进程是线程安全的(即防止其他线程在文件中查找时一个线程正在写/读)。
您将如何实现这一点?我应该使用 RandomAccessFile 还是 Java NIO?我需要获取什么样的锁?例如。 RandomAccessFile-instance 会自动获取文件的系统范围锁定还是我需要单独保留它?
编辑:看起来randomAccessFile.getChannel().tryLock() 获得了系统范围的锁,但它由 VM 持有,而不是调用线程。因此,如果我正在使用它,那么我还需要为线程获取一个锁(或者实际上是两个,因为我需要同时锁定源文件和目标文件)。
【问题讨论】:
标签: java concurrency copy io