Java File Locking
java, locking
Solution
If the file is only accessed from your program, the synchronized lock object is okay. But if you want to protect the file from being changed by other programs while you're working on it, you can use Java's file locking features in `java.nio.channels.FileLock` (example). As the text says, mind that on some operating systems, programs can still change files if they don't check for an existing file lock.
Problem
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.".