Question:
How do you lock a file in Java to prevent simultaneous multiple
accesses?
Answer:
If you're concerned about simultaneous access by independent processes,
you'll have to rely on the host OS to prevent this. Perhaps this
mechanism can be invoked by a native function that can be imported into
your Java program. (It is also possible to set the security manager object
associated with a particular virtual machine to prevent access to a file
by 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, and
synchronized methods for accessing that resource. A synchronized
method can only be invoked by one thread at a time. Other threads
wait in an associated queue.
Returning to your file example, you could create a file monitor
containing 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 the
FileOutputStream class:
class SecureFileOutputStream extends FileOutputStream {
public SecureFileOutputStream(String fname) { super(fname); }
public synchronized void write(byte b[]) throws IOException {
super.write(b);
}
// etc.
}