欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的功能吧
        }
    }

有用的上的可以看看
????

相关标签: XFile NFS