我们说我有两个进程在运行(A和B)。 A打开了一个文件。如果B也试图打开文件B是否等待A关闭文件或B抛出异常?或者文件系统通过一些魔法(如在内存副本和缓冲区中创建)尝试让两个进程同时打开文件?
提前谢谢
答案 0 :(得分:0)
两个线程都可以打开同一个文件。
没有错误被抛出。
见下文:
以下程序的输出是:
进程1打开文件
1
2
3
进程2打开文件
1
2
3
处理1已关闭的文件
处理2关闭文件
测试文件的内容" /tmp/test1.txt"是:1 2 3
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class TwoThreadsOneFileExample {
public static void main(String[] args) throws InterruptedException {
Process p1 = new Process("1");
Thread t1 = new Thread(p1);
Process p2 = new Process("2");
Thread t2 = new Thread(p2);
t1.start();
Thread.sleep(2000);
t2.start();
Thread.sleep(20000);
}
}
class Process implements Runnable {
String name;
public Process(String name) {
this.name = name;
}
@Override
public void run() {
try {
processFile();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
private void processFile() throws InterruptedException {
String fileName = "/tmp/test1.txt";
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
System.out.println("process " + name + " opened file");
stream.forEach(System.out::println);
Thread.sleep(10000);
} catch (IOException e){
throw new RuntimeException(e);
}
System.out.println("process " + name + " closed file");
}
}