Callable捕获异常
import java.util.concurrent.*;
/**
* Callable捕获异常
*/
public class CallableGetThrow {
public static void main(String[] args){
int timeout = 2;
ExecutorService executor = Executors.newSingleThreadExecutor();
Boolean result = false;
Future<Boolean> future = executor.submit(new TaskThread("发送请求"));//将任务提交给线程池
try {
System.out.println("try");
result = future.get(timeout, TimeUnit.SECONDS);//获取结果
future.cancel(true);
System.out.println("发送请求任务的返回结果:"+result); //2
} catch (InterruptedException e) {
System.out.println("线程中断出错。"+e);
future.cancel(true);// 中断执行此任务的线程
} catch (ExecutionException e) {
System.out.println("线程服务出错。");
future.cancel(true);
} catch (TimeoutException e) {// 超时异常
System.out.println("超时。");
future.cancel(true);
}finally{
System.out.println("线程服务关闭。");
executor.shutdown();
}
}
static class TaskThread implements Callable<Boolean> {
private String t;
public TaskThread(String temp){
this.t= temp;
}
/*
try
继续执行..........
发送请求任务的返回结果: true
线程服务关闭。
*/
// public Boolean call() throws InterruptedException {
// Thread.currentThread().sleep(1000);
// System.out.println("继续执行..........");
// return true;
// }
/*
try
超时。
线程服务关闭。
*/
// public Boolean call() throws InterruptedException {
// Thread.currentThread().sleep(3000);
// System.out.println("继续执行..........");
// return true;
// }
/*
* try
* start
* 线程服务出错。
* 线程服务关闭。
*/
public Boolean call() throws InterruptedException {
System.out.println("start");
throw new InterruptedException();
}
}
}