java处理XFile连接超时问题
程序员文章站
2022-05-23 23:14:13
...
java nfs Xfile 连接响应超时处理
nfs远程获取文件,当远程nfs服务未启动时,java代码中XFile的连接会挂掉。这个程序就直接停住了。
之前用的是java调用mount命令行来做的,一直想用java代码来实现。后来想了个办法,有不对的大家也可以给给意见。
ExecutorService exec = Executors.newFixedThreadPool(1);
Callable<XFile> call = new Callable<XFile>() {
public XFile call() throws Exception {
Thread thread = Thread.currentThread();
thread.setName("NFS-CONNECT");//取特殊的名字,web项目可以后面加个sessinId啥的
//开始执行耗时操作
XFile xFile = new XFile("nfs:// ip :/a/b/c/");
xFile.exists();
return xFile;
}
};
try {
Future<XFile> future = exec.submit(call);
XFile xFile = future.get(2000, TimeUnit.MILLISECONDS); //任务处理超时时间设为 1 秒
System.out.println("能否连接:" + xFile);
} catch (TimeoutException ex) {
System.out.println("处理超时啦....");
ex.printStackTrace();
} catch (Exception e) {
System.out.println("处理失败.");
e.printStackTrace();
}
//上述程序,看似获取到了超时的返回,但是线程其实一直都在,现在要把线程关闭
Set<Thread> set = Thread.getAllStackTraces().keySet();
for(Thread thread:set){
System.out.println(thread.getName());
if("NFS-CONNECT".equals(thread.getName())){
thread.stop();
//thread.interrupt();
//关闭 这里使用已经弃用的stop方法,这个线程hang住了,不会返回了,interrupt关闭不了。只能用stop了。上面代码已经收到数据返回了,这里应该不需要关心数据被破坏的问题了。stop 类似kill的功能吧
}
}
有用的上的可以看看
????
上一篇: 栈和队列数据结构
下一篇: url参数以对象返回