Java 文件锁技术

    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();

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值