程序里访问webservice,但是在开发环境下访问不到webservice的地址,webservice客户端程序程序就堵塞挺长的时间(大约5分钟)。在调用webservice处加上超时时间限制,超过设定的时间就往外抛出异常。
import java.util.concurrent.*;
public class Class01 {
public static void main(String[] args) {
try {
ExecutorService poll = Executors.newFixedThreadPool(1);
//<String> 表示耗时计算的返回值类型
Future<String> future = poll.submit(new Callable<String>() {
@Override //call的返回值根据上面的泛型类型而定
public String call() throws Exception { //call方法里是耗时操作,比如webservice请求,服务端访问不到
return "耗时操作返回结果";
}
});
//10秒超时 //future.get 可以取到耗时操作的返回值,如果耗时操作没处理完,future.get方法会在此阻塞
String result = future.get(10, TimeUnit.SECONDS);
poll.shutdown(); //如果不shutdown,main方法执行完,程序不停止
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
谨慎使用 这种用法