多个Java进程可以同时读取同一个文件吗?

Min*_*ock 5 java linux io concurrency file

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

我想在 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
}
Run Code Online (Sandbox Code Playgroud)

没有应用程序会写入文件,但多个线程/应用程序需要同时执行上面的代码。上面的代码是否正常,或者在这种情况下我需要使用任何特殊机制吗?

此外,该解决方案应该是独立于平台的,并且必须在类似 Linux 的系统上工作。

fge*_*fge 6

多个Java进程可以同时读取同一个文件吗?

他们当然可以;最终,无论如何确保每个进程/线程以自己的速度读取是操作系统的作用,因此您无需担心。

当然,您可能希望在不同线程之间共享尽可能多的资源,但肯定不是 I/O 流;如果您使用 Java 7 或更高版本,请使用新的文件 API(这是 2014 年;Java 7 出现已经 3 年了);File与 java.nio.file 相比,它是一个非常低劣的 API(事实上,与大多数编程语言的文件操作 API 相比)。