ExecutorService超时响应问题

yingping1898 yingping1898 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
基本的场景是这样的:

一个上游请求进来,我们需要同时向外部合作平台(N个)发起N个请求,同时需要在一定时间内得到响应,若超时则弃用。同时将这些响应选择回应给最初的上游请求。

所以选择使用ExecutorService,用
List<Future<Object>> result = es.invokeAll(tasks, TIME_OUT, TimeUnit.MILLISECONDS);

得到执行结果;同时http请求也设置了超时参数:

urlConnection.setConnectTimeout(100);
urlConnection.setReadTimeout(100);


在并发不高的情况下,程序没有问题。但在并发达到1000左右的时候,程序就出问题了。具体表现为:
在设置了TIME_OUT的情况下,偶尔也会出现超时但ExecutorService并没有放弃任务,并在大于TIME_OUT的时间返回执行结果。由于时效性非常高,超时的响应不但无效,而且直接影响了上游请求的响应时效。

现在困惑的是,代码都是在方法内部完成,没有共享变量,因而没有线程安全问题。那么,问题究竟出现在哪里?求解。
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
yingping1898
高性能WEB开发 25,979 成员 4,366 内容