有时候碰到一种情况,远程请求一个任务,但是请求时间不能超过一定时间,超过后按超时处理,这种情况我们可以用一段代码来实现,但是如果我们实现成一个类 ,则可以让代码更简洁,更具有健壮性
首先定义一个接口
public interface TimeOut<T> extends Callable<T> {
void onTimeout();
void start();
}
start方法表示开始这个任务,onTimeout方法超时后的动作,该接口继承了Callable,也就是这个接口是可以线程执行的
接着我们定义一个抽象类来简单封装一下:
public abstract class AbstractTimeOutTask<T> implements TimeOut<T> {
private volatile boolean done = false ;
@Override
public void onTimeout() {
System.out.println("this task is time out.");
}
@Override
public void start() {
Future<T> result = executor.submit(this);
try {
T res = result.get(timeout(),TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}