Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个Java进程能否同时读取同一个文件?_Java_Linux_File_Concurrency_Io - Fatal编程技术网

多个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

是否可以同时从两个或多个不同进程读取同一文件

我希望在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 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
文件
本质上是一个包装器,它围绕着一个
字符串
,表示所讨论文件的路径。
新建文件
不会打开任何内容。
新建文件输入流
每次都会返回一个新流。谢谢或者答案是:)