锁定老帖子 主题:对文件加锁应怎样解决呢?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-12
对文件加锁应怎样解决呢?目的: 对文件读写时进行异步化、 我只对一个文件进行 读、写、清空、操作;进行异步化 实现的步骤顺序是: 《1》、随时对文件进行写操作 《2》、一分钟后去读取这个文件的内容、然后再清空内容、 《3》、就这么一直循环的走。 《4》、在以上《1、2》步骤之间都包含对文件进行加锁。 恩、我遇到的问题是: 《1》、如果在读取文件的时候、刚读取完、这时对文件进行了解锁、解锁后另一个文件对象就可以 操作这个文件了、 偏偏在这时对文件进行了写、然而在读完后的这个方法中却要清空这个文件的内容、 这样一来数据就不完整了不是。这是我的一个难题啊、请大家仔细看看我的说明、然后给我一个答案谢谢。 请大家吧、给我一个好的解决方案!!!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-12
> 在读取文件的时候、刚读取完、这时对文件进行了解锁
> 然而在读完后的这个方法中却要清空这个文件的内容 所以,应当是清空这个文件的内容后,再解锁 |
|
返回顶楼 | |
发表时间:2007-11-12
恩、你这个思路我懂、但是这时已对文件进行了加锁、如果在解锁之前在创建一个文件对象执行的话回报错的
错误信息:另一个程序已锁定文件的一部分,进程无法访问。 但是如果用当前这个对象的话我不知道因怎样清空这个文件 如下是我使用的方法写的: public String setAttribute(String key, String value) { FileLock flock = null; String oldValue = null; FileChannel lockfc = null; RandomAccessFile fis = null; try { // 打开一个临时的文件,注意同一共享内存,该文件名要相同。 fis = new RandomAccessFile(filename, "rw"); // 获得文件通道 lockfc = fis.getChannel(); // 获得文件的独占锁,若文件已被人锁定,则一直等待 flock = lockfc.lock(); oldValue = (String) recTreeMap.put(key, value);//recTreeMap对象是一个全局TreeMap对象 // set the file point to the beginning of the file lockfc.position(0); ObjectOutputStream out; out = new ObjectOutputStream(Channels.newOutputStream(channel)); out.writeObject(recTreeMap); out.close(); } catch (IOException ee) { ee.printStackTrace(); } finally { // if flock is not null, we should release it try { if (flock != null) if (flock.isValid()) { flock.release(); } if (lockfc != null) lockfc.close(); if (fis != null) fis.close(); } catch (ClosedChannelException o) { o.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception er) { er.printStackTrace(); } } } 我是这样写进去的:但是在读的时候也是使用相同的方法进行读的。 就是在读的时候怎样使用当前的对象进行清空这个文件中的内容。 |
|
返回顶楼 | |
发表时间:2007-11-12
象Eclipse或者lucene一样,使用.lock文件
|
|
返回顶楼 | |
发表时间:2007-11-12
上面那位大哥你说的是什么意思啊!!!
小弟看不懂啊!!! 能不能详细一点阿!!! |
|
返回顶楼 | |
发表时间:2007-11-12
他是说,用其他的文件作为锁使用。自己实现锁机制
|
|
返回顶楼 | |
发表时间:2007-11-12
恩、我还是不会啊、你就在详细一点吧、举一个例子如何呢?
|
|
返回顶楼 | |
发表时间:2007-11-12
某个线程读取的时候,生成一个以.lock结尾的文件,其他要读时,先判断是否存在这lock文件
|
|
返回顶楼 | |
发表时间:2007-11-12
恩、ok、我明白了。
|
|
返回顶楼 | |
发表时间:2007-11-13
千万不要忘记删除,否则你就死了
可以参考Lucene的代码 |
|
返回顶楼 | |