场景(JAVA/UNIX(:
进程A将文件写入磁盘(使用FileOutputStream(
进程B试图读取相同的文件,而进程A仍在写入(使用FileInputStream(
问题:
- 即使进程B尝试读取,进程A是否能够成功将文件写入磁盘
- 流程B中发生了什么?文件被锁定了吗?是否引发IOException?或者它能读取不完整的文件吗
- 即使进程B尝试读取,进程A是否能够成功将文件写入磁盘
是。它将能够正确地写入文件。读取不会干扰写入。。。在Linux上。
- 流程B中发生了什么?文件被锁定了吗?是否引发IOException?或者它能读取不完整的文件吗
它可能会看到一个不完整的文件。(如果你幸运的话,它可能会看到一个完整的文件。(
Linux默认情况下不会锁定文件。要获得锁定,读取器和编写器都需要进行flock(2)
系统调用。在Java中,映射为使用FileLock
。
在UNIX/Linux/MacOS上不会抛出JavaIOException
。(或者在安卓系统上。(你只会在Windows上遇到锁定问题。
欢迎任何提示。
提示:你可以写一个小测试程序并尝试一下。。。。