I have several threads (some of which are spawned by Process X, others by Process Y, et cetera), and each thread needs to write to a file MyFile
. However, if Thread T1
starts writing to MyFile
first, then, when Thread T2
starts writing, it needs to wait for T1
to release the file, so that it can read the contents that were written in Thread T1
. In other words, each thread would have a finalizeThread
method, like so:
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
}
}
My question is: How can I accomplish the locked_section
in the above code? I was looking into the FileLock
class, but it says in the Javadoc that "File locks are held on behalf of the entire Java virtual machine. They are not suitable for controlling access to a file by multiple threads within the same virtual machine.".