java设置一段代码执行的超时时间的简单方法 间接实现获取Connection超时问题

HBase未启动时会持续重试,设置超时来kill掉防止浪费太多时间。

http://alantong08.iteye.com/blog/1646908

java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满足这个需求。Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。

 

import java.util.concurrent.*;

/**
 * Created by shiyanghuang on 17/3/14.
 */
public class futureTaskTest {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        FutureTask future =
                new FutureTask(new Callable() {//使用Callable接口作为构造参数
                    public String call() {
                        //真正的任务在这里执行,这里的返回值类型为String,可以为任意类型
                        return "Yes";
                    }});
        executor.execute(future);
                    //在这里可以做别的任何事情
        try {
            String result = future.get(5000, TimeUnit.MILLISECONDS); //取得结果,同时设置超时执行时间为5秒。同样可以用future.get(),不设置执行超时时间取得结果
            System.out.print(result);
        } catch (InterruptedException e) {
            future.cancel(true);
        } catch (ExecutionException e) {
            future.cancel(true);
        } catch (TimeoutException e) {
            future.cancel(true);
        } finally {
            executor.shutdown();
        }
    }
}

 

LEAVE A COMMENT