任务执行超时,想做下日志记录,该如何处理?
我们想到了使用FutureTask,FutureTask的get方法可以设置超时时间,一旦线程超时,get方法就会抛出TimeoutException异常
我们看一段测试代码:
public class FutureTaskOutTime {
public static void main(String[] args) throws InterruptedException {
FutureTask<String> futureTask = new FutureTask<>(()->{
int i=0;
while(true){
i++;
System.out.println("run:" + i);
//到1000时返回
if(i%1000==0) {
System.out.println("run:" + i);
return String.valueOf(i);
}
}
});
Thread my = new Thread(futureTask);
my.start();
try {
//1ms超时
String i= futureTask.get(1,TimeUnit.MILLISECONDS);
System.out.println("return i:"+i);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
System.out.println("Time out");
}
}
我运行了几次,等不到get方法返回,就会报TimeoutException,打印出Time out了。
那么在这之后,线程会停止打印吗?
答案是不会。
执行超时,异步线程并不会停止,它还在执行,直到处理完成或返回结果为止。
中间打印部分省略
\