我有几个线程(其中一些是由进程X生成的,另一些是由进程Y生成的,等等),每个线程都需要写入一个名为
MyFile
的文件。但是,如果Thread T1
首先开始写入MyFile
,那么当Thread T2
开始写入时,它需要等待T1
释放该文件,以便它可以读取在Thread T1
中编写的内容。换句话说,每个线程都将具有finalizeThread
方法,如下所示:private void finalizeThread() {
File f = new File("MyFile.dat");
f.createNewFile(); // atomically creates the file, if it doesn't exist
locked_section {
readContentsFromFile(f); // read contents if some other thread already modified the file
modifyContentsFromFile(f); // modify
writeFile(f); // write, so that new threads can see the content modified by this thread
}
}
我的问题是:如何完成上面代码中的locked_section
?我查阅了FileLock
类,但是Javadoc中说:"文件锁定是代表整个Java虚拟机持有的。它们不适用于在同一虚拟机内由多个线程控制对文件的访问。"。
finalize
。它是一个在线程完成其工作后调用的方法/回调,因为我没有使用标准的 Java 并发 API 线程。我将重命名它,以避免与Object#finalize
引起混淆。 - João Silva