码迷,mamicode.com
首页 > 编程语言 > 详细

java监控文件运行状态

时间:2016-06-21 20:32:53      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

package com.rmi.clent;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class RunCmd implements Callable {

String fileLockPath ="";
public RunCmd(String fileLockPath ) {
this.fileLockPath =fileLockPath;
}

@Override
public Object call() throws Exception {

return isRunning(fileLockPath);
}

/**
* 通过文件锁来判断程序是否正在运行
* @return 如果正在运行返回true,否则返回false
* @throws Exception
*/
private boolean isRunning(String fileLockPath) throws Exception
{
boolean rv=false;
try {
RandomAccessFile fis = new RandomAccessFile(fileLockPath,"rw");
FileChannel lockfc = fis.getChannel();
boolean flag = true;
FileLock flock = null;
try{
if(lockfc !=null){
flock = lockfc.lock();
flag = true;
}else{
flag =false;
}

} catch (Exception e) {
flag = false;
//e.printStackTrace();
// throw new Exception("程序正在运行") ;
}
if(flag) {
System.out.println("程序没有运行mmmmmmmmm.");
rv=true;
}else {
System.out.println("程序正在运行xxxxx.");
}
// 关闭流
Thread.sleep(10000);
if(flock !=null){
flock.release();
}
fis.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rv;
}



public void ExcuteThread(String strFilePath) {
// strFilePath="D:\\test\\text.txt";//空文件
System.out.println("strFilePath:"+strFilePath);
ExecutorService pool = Executors.newFixedThreadPool(2);
RunCmd wf =new RunCmd(strFilePath);

// RunCmd wf1 =new RunCmd(strFilePath);
Future f1 = pool.submit(wf);
// Future f2 = pool.submit(wf1);
System.out.println();
TimeUnit unit = TimeUnit.SECONDS;
// f1.get(3000, unit);
String returnStr = "";
try {
returnStr = f1.get(3000, unit).toString();
System.out.println("f1:"+returnStr);
// returnStr = f2.get(3000, unit).toString();
// System.out.println("f2:"+returnStr);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (TimeoutException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(">>>"+returnStr);
//关闭线程池
pool.shutdown();
// 等待子线程结束,再继续执行下面的代码
try {
pool.awaitTermination(30000, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
RunCmd tk = new RunCmd("D:\\test\\text.txt");
tk.ExcuteThread("D:\\test\\text.txt");
}

}

java监控文件运行状态

标签:

原文地址:http://www.cnblogs.com/leiyf/p/5604679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!