Leave a Comment
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(); FutureTaskfuture = 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(); } } }