Question:
How do you lock a file in Java to prevent simultaneous multipleaccesses?
Answer:
If you’re concerned about simultaneous access by independent processes,you’ll have to rely on the host OS to prevent this. Perhaps thismechanism can be invoked by a native function that can be imported intoyour Java program. (It is also possible to set the security manager objectassociated with a particular virtual machine to prevent access to a fileby all threads running in that virtual machine.)
If you’re concerned about simultaneous access by independent threads,Java offers an elegant mechanism called a monitor. It’s an object containing a shared resource, such as a file, andsynchronized methods for accessing that resource. A synchronizedmethod can only be invoked by one thread at a time. Other threadswait in an associated queue.
Returning to your file example, you could create a file monitorcontaining the file as a member:
class FileMonitor { private FileOutputStream f; public FileMonitor(String fname) { f = FileOutputStream(fname); } public synchronized void write(byte b[]) throws IOException { f.write(b); } // etc. }Alternatively, you could create a secure extension of theFileOutputStream class: class SecureFileOutputStream extends FileOutputStream { public SecureFileOutputStream(String fname) { super(fname); } public synchronized void write(byte b[]) throws IOException { super.write(b); } // etc. }