FileLock实现对文件的锁功能


在多线程环境下使用FileLock实现对文件的锁功能,避免多个线程同时操作同一文件,


程序:

 public class Demo{

FileLock   lock;

/* 读写文件*/

  public RWFile(){

    lock=tryLock();

    if(lock!=null){

      // 锁成功

      可以对文件做处理 ..

     unlock();

   }else{

     //锁失败

  }

}   


/*锁操作 返回非空表示锁成功*/

 private FileLock tryLock() throws IOException {

      File lockF = new File(root, "xxx.dat");   // 要锁的文件

      lockF.deleteOnExit();   // 指定在退出时释放锁

      RandomAccessFile file = new RandomAccessFile(lockF, "rws");  //指定要锁的文件

      FileLock res = null;

      try {

        res = file.getChannel().tryLock();    // 试图取得文件的锁

      } catch(OverlappingFileLockException oe) {  // 文件被其它线程锁时抛出此异常

        file.close();

        return null;

      } catch(IOException e) {

        LOG.error("Cannot create lock on " + lockF, e);

        file.close();

        throw e;

      }

      return res;

    }

/* 解锁 操作*/

 private void unlock() throws IOException {

      if (this.lock == null)

        return;

      this.lock.release();

      lock.channel().close();

      lock = null;

    }

  }

 

你可能感兴趣的:(多线程,File,null,Class)