多个Java进程能否同时读取同一个文件?
是否可以同时从两个或多个不同进程读取同一文件 我希望在Java应用程序中执行类似的操作:多个Java进程能否同时读取同一个文件?,java,linux,file,concurrency,io,Java,Linux,File,Concurrency,Io,是否可以同时从两个或多个不同进程读取同一文件 我希望在Java应用程序中执行类似的操作: final File f = new File("read-only-file"); final FileInputStream in = new FileInputStream(f); int b; while((b = in.read()) != null) { //process b Thread.sleep(10); //several read processes would re
final File f = new File("read-only-file");
final FileInputStream in = new FileInputStream(f);
int b;
while((b = in.read()) != null) {
//process b
Thread.sleep(10); //several read processes would really happen at the same time
}
没有应用程序会写入该文件,但多个线程/应用程序需要同时执行上述代码。上面的代码可以吗?或者在这种情况下我需要使用任何特殊的机制吗
此外,该解决方案应该是独立于平台的,并且必须在类似Linux的系统上工作
多个Java进程能否同时读取同一个文件
当然可以;最终,操作系统的作用是确保每个进程/线程以自己的速度读取,因此您不必担心
当然,您可能希望在不同线程之间共享尽可能多的资源,但肯定不是I/O流;如果您使用的是Java 7或更高版本(现在是2014年;Java 7问世已经三年了),那么在我们使用它的同时,请使用新的文件API<代码>文件与java.nio.File相比(事实上,与大多数编程语言的文件操作API相比)是一个非常差的API。您可以相对轻松地尝试这一点,但答案是肯定的。@SotiriosDelimanolis然后写一个答案,这样我就可以接受它。它可能会让你的硬盘发疯——除非你有SSD或某种RAID。@Boristeider你对fs缓存有什么看法?@fge取决于我想的文件大小。如果我同时执行问题中的代码数次(在不同的线程中,
文件
和文件输入流
对象是否相同,以便文件输入流
具有相同的当前读取位置?还是新文件(路径)
在多次调用时始终返回具有不同流的不同对象?@MinecraftShamrock文件
本质上是一个包装器,它围绕着一个字符串
,表示所讨论文件的路径。新建文件
不会打开任何内容。新建文件输入流
每次都会返回一个新流。谢谢或者答案是:)