//*********
// 成员内部类
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();
//***********