问题描述
需求:A进程读取文件file.txt,对其有读写权限,此时文件file.txt被A进程占用;再A进程操作文件file.txt的同时,B进程也读取file.txt,但是只有只读权限,不能对文件进行修改。我使用java.nio.channels.FileLock,只能A进程独占file.txt,B进程不能读取file.txt。像完成上述功能怎么实现
解决方案
解决方案二:
就这么沉了。。。。。
解决方案三:
FileLocklock=null;publicbooleanisRunning(){try{FileflagFile=newFile("被锁的目标文件");if(!flagFile.exists())flagFile.createNewFile();lock=newFileOutputStream(ConfigAll.openfile).getChannel().tryLock();if(lock==null)returnfalse;}catch(Exceptionex){ex.printStackTrace();}returntrue;}
在对文件进行操作前执行以上方法,如果文件未上锁则可以对其操作,如果已经上锁说明已经被占不能操作~
解决方案四:
引用2楼fulong258的回复:
JavacodeFileLocklock=null;publicbooleanisRunning(){try{FileflagFile=newFile("被锁的目标文件");if(!flagFile.exists())flagFile.createNewFile(……
还是没有实现同时性,N个进程同时都有读的权限,就像队列一样,只有队头有update权限,出队后下一个进程才有update权限。。。。。。
解决方案五:
用一个队列来存放请求的对象,对头[0]不停的检测执行isRunning()方法,如果文件未上锁则可以对其操作,在队列里面删除自己,操作完成以后释放文件,交由队列的新对头[0]访问,如此循环!
时间: 2024-08-04 09:27:14