需求:
    A进程读取文件file.txt,对其有读写权限,此时文件file.txt被A进程占用;
    再A进程操作文件file.txt的同时,B进程也读取file.txt,但是只有只读权限,不能对文件进行修改。
我使用java.nio.channels.FileLock,只能A进程独占file.txt,B进程不能读取file.txt。像完成上述功能怎么实现

解决方案 »

  1.   


      FileLock lock=null;
      public boolean isRunning(){
        try
        {
          File flagFile=new File("被锁的目标文件");
          if(!flagFile.exists())flagFile.createNewFile();
          lock=new FileOutputStream(ConfigAll.openfile).getChannel().tryLock();
          if(lock==null)return false;
        }catch(Exception ex){ex.printStackTrace();}
        return true;
      }在对文件进行操作前执行以上方法,如果文件未上锁则可以对其操作,如果已经上锁说明已经被占不能操作~
      

  2.   

    还是没有实现同时性,N个进程同时都有读的权限,就像队列一样,只有队头有update权限,出队后下一个进程才有update权限
      

  3.   

    用一个队列来存放请求的对象,对头[0]不停的检测执行isRunning()方法,如果文件未上锁则可以对其操作,在队列里面删除自己,操作完成以后释放文件,交由队列的新对头[0]访问,如此循环!