java File锁的问题

问题描述

需求: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

java File锁的问题的相关文章

[Java] 方法锁、对象锁和类锁的意义和区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 首先的明白Java中锁的机制 synchronized  在修饰代码块的时候需要一个reference对象作为锁的对象.  在修饰方法的时候默认是当前对象作为锁的对象.  在修饰类时候默认是当前类的Class对象作为锁的对象.   线程同步的方法:sychronized.lock.reentrantLock分析 方法锁(synchronized修饰方法时) 通过在方法声明中加入 synchronized关键字来声明 synch

Java File类的常用方法总结

 这篇文章主要介绍了Java File类的常用方法总结,本文讲解了File类的常用方法,并对一些方法给出了代码示例,需要的朋友可以参考下     Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看一下. 构造函数 代码如下: public class FileDemo { public static void main(String[] args)

java File类的基本使用方法总结_java

Java IO中File的使用是比较频繁的,在文件的上传和删除中都会用到的.比如我们在写管理系统的时候有可能会用到图片的上传,和删除.那么我们就会用到Java的 File来处理. Java中File的基本使用创建和删除文件: public class FileDemo { public static void main(String[] args) { File f=new File("d:"+File.separator+"io.txt"); //File.sep

java File.listFiles() 返回值无法操作的问题

问题描述 java File.listFiles() 返回值无法操作的问题 File[] files = myfileFile.listFiles();//**这个返回值无法操作,是怎么回事.** for(File f : files) { System.out.println("1"); if(f.exists()) //这里我的测试文件是存在的,但exists()返回false. { System.out.println("10"); } if(f.canRea

java File中 相关path疑问

问题描述 java File中 相关path疑问 File中的 getPath()和 getAbsolutePath(),getCanonicalPath() 有什么区别? 我自己验证是打印出的路径都一样,谁能举例或者能说出区别 ? 非常感谢 D:STSworkspace-stsinvoicingtargettest-classescnhyxiofiletesttest1.hyx.csv D:STSworkspace-stsinvoicingtargettest-classescnhyxiofi

线程-关于java sychronized锁代码块对该对象的其它sychonized方法是否有影响的问题。

问题描述 关于java sychronized锁代码块对该对象的其它sychonized方法是否有影响的问题. 代码是书上例子,我简化了,启用线程ob1后,通过主线程调用sychonized方法mysuspend()和myresume()来控制ob1线程的等待与重启.线程从15开始倒数,0.5秒个,主线程在1秒时候暂停文字提示,再过1秒重启线程.例子中的sychonized代码块仅包含wait()判定部分,输出与预期一样,倒数到14的时候中断,之后又恢复.但是当我将sychonized代码块前移

多态-java创建锁对象的问题

问题描述 java创建锁对象的问题 在创建锁对象是都是用Lock Lock=new ReentrantLock();以多态的方式. 我想问可以使用ReentrantLock Lock=new ReentrantLock()的方式创建锁吗?_ 解决方案 Java synchronized 关于锁的对象顺序问题JAVA创建String对象的问题JAVA创建String对象问题 解决方案二: 可以啊,只不过前一个是用基类类型赋给子类实例,后者直接是个子类类型. 解决方案三: 当然可以,前者是多态,后者

Java File类的常用方法总结_javascript技巧

Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看一下. 构造函数 复制代码 代码如下: public class FileDemo {      public static void main(String[] args){          //构造函数File(String pathname)          File f1 =new Fi

java 多线程-锁详解及示例代码_java

自 Java 5 开始,java.util.concurrent.locks 包中包含了一些锁的实现,因此你不用去实现自己的锁了.但是你仍然需要去了解怎样使用这些锁. 一个简单的锁 让我们从 java 中的一个同步块开始: public class Counter{ private int count = 0; public int inc(){ synchronized(this){ return ++count; } } } 可以看到在 inc()方法中有一个 synchronized(th