//********* // 成員內部類 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(); //***********