java接口超时设置_java接口请求超时处理方法
//*********
// 成员内部类
class CallableThread implements Callable {
@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 callableThread=new CallableThread();
FutureTask 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 call = new Callable(){
public Result call() throws Exception{
//这个是一个耗时的网络 请求
Result r = HBaseUtil.getRow("grid_data", Bytes.toBytes(row_key));
return r;
}
};
// Future是一个接口,该接口用来返回异步的结果
Future 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();
//***********
标签:java,接口,Callable,printStackTrace,call,Result,catch,new,超时
//********* // 成员内部类 class CallableThread implements Callable { @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 callableThread=new CallableThread(); FutureTask 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 call = new Callable(){ public Result call() throws Exception{ //这个是一个耗时的网络 请求 Result r = HBaseUtil.getRow("grid_data", Bytes.toBytes(row_key)); return r; } }; // Future是一个接口,该接口用来返回异步的结果 Future 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(); //*********** 标签:java,接口,Callable,printStackTrace,call,Result,catch,new,超时