//********* // 成员内部类 class CallableThread implements Callable<Result> { @Override public Result call() { try { // 假设这个是一个耗时的网络 请求 Result r = HBaseUtil.getRow("grid_data", Bytes.toBytes(row_key)); return r; } catch (Exception e) { // 假装记录一下日志 e.printStackTrace(); return null; } } } Callable<Result> callableThread=new CallableThread(); FutureTask<Result> task= new FutureTask<>(callableThread); // 开启线程 new Thread(task).start(); Result r; try { // 如果3秒没有返回值就 抛出异常 r = task.get(3000, TimeUnit.MILLISECONDS); } catch (Exception e) { r=null; } // 结束事件 //*********** 方式二: //********* final ExecutorService exec = Executors.newSingleThreadExecutor(); Callable<Result> call = new Callable<Result>(){ public Result call() throws Exception{ //这个是一个耗时的网络 请求 Result r = HBaseUtil.getRow("grid_data", Bytes.toBytes(row_key)); return r; } }; // Future是一个接口,该接口用来返回异步的结果 Future<Result> future = exec.submit(call); Result r = null; try{ // 同步结果,并且设置超时时间 r = future.get(1000 * 1,TimeUnit.MILLISECONDS); }catch(InterruptedException e){ e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } //执行结束后,手动关闭线程池 exec.shutdown(); //***********