fature.get(long timeout, TimeUnit unit)超时是否返回null的情况

记录问题,暂时还没得到解决

最近在工作中遇到这个问题,自己找了很多资料,始终没得到解决,所以发出来看看是否有人跟我遇到同样的问题,一起讨论

关于这个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;

这个问题困扰我很久了, 自己查资料完全没结果。所以发出来大家一起看看,欢迎各位大佬帮忙指点,讨论。

第一次发博客,紧张,也不会排版,大家凑合看。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值