六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 18|回复: 0

Java 文件锁技术

[复制链接]

升级  6.67%

62

主题

62

主题

62

主题

举人

Rank: 3Rank: 3

积分
220
 楼主| 发表于 2013-2-3 13:32:02 | 显示全部楼层 |阅读模式
    IRIP项目中,Agent每分钟都要向Director请求数据。为了保证Agent正常运行,防止意外中断,我添加了Windows schedule task 去定时启动Agent(Agent运行在Windows系统上)。
    同时,为了保证Agent不被多次启动,我在Agent中使用了文件锁技术。当Agent启动时,会得到一个指定文件的锁,如果Agent正常运行,该锁会一直保持,不会释放,除非Agent中断,才会释放该锁。每次Windows schedule task去启动Agent时,就会先判断是否能得到指定文件的锁,如果Agent正在正常运行,说明该指定文件的锁已经被占用,本次启动就无法拿到指定文件的锁,拿不到锁,就撤销本次启动,达到防止Agent多次运行的目的。
 
    文件锁的使用很简单,下面简要给出例子:
 
import java.io.FileOutputStream;import java.nio.channels.FileLock;public class FileLocking {public static void main(String[] args) throws Exception {FileOutputStream fos;fos = new FileOutputStream("file.txt");FileLock fl = fos.getChannel().tryLock();//得到锁if (fl != null) {//调用自己的操作System.out.println("Locked File");doSomething();//这是一个会一直运行下去的操作fl.release();System.out.println("Released Lock");}else{//得不到锁,退出程序,这能保证该进程同时只能执行一个return;}fos.close();}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表