devxlogo

How to Prevent Simultaneous Access

How to Prevent Simultaneous Access

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.   } 

devx-admin

Share the Post: