记录问题,暂时还没得到解决
最近在工作中遇到这个问题,自己找了很多资料,始终没得到解决,所以发出来看看是否有人跟我遇到同样的问题,一起讨论
关于这个Future接口有以下几个方法
public interface Future<V> {
boolean cancel(boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get() throws InterruptedException, ExecutionException;
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;
}
今天只讨论get(long timeout, TimeUnit unit)这个,我也查过很多资料,有些人说超时会返回null,有些人说超时会抛异常。
刚好今天工作遇到了,我也做试着测试了一下,结果看下面
本地8081端口的torch/home/ce接口是一个超时的接口,结果确确实实是抛的超时异常,并没有返回null;
那么问题来了,我工作中遇到的问题看下图
在图中红框这一行确确实实有抛出过空指针的异常,那么问题来了,超时是抛出的超时异常而不是返回null,那么这一行抛出的空指针到底是怎么来的。这一行能抛空指针唯一的可能就是response对象为空,不需要考虑别的,比如说不用考虑那个toString方法会抛空指针,这一行唯一会空指针的就是response对象为null,那么什么情况下response会为null呢。
引用的包看下面:
其中HttpAsyncClient用的是:org.apache.http.nio.client.HttpAsyncClient;
new DefaultHttpAsyncClient()是:org.apache.http.impl.nio.client.DefaultHttpAsyncClient.DefaultHttpAsyncClient() throws IOReactorException;
HttpGet:org.apache.http.client.methods.HttpGet;
Future:java.util.concurrent.Future;
这个问题困扰我很久了, 自己查资料完全没结果。所以发出来大家一起看看,欢迎各位大佬帮忙指点,讨论。
第一次发博客,紧张,也不会排版,大家凑合看。