直接上代码:

可以看到上图中,异步线程执行mongo的写入,这里没看到多大问题。
我们去看看这个异步线程的配置:

线程配置的最小20,最大50,等待时间10s,任务task容量1000,按道理说这样的配置可以了,应该没什么问题。那什么情况下会出现问题呢?
mongo服务是各方使用的,而此时由于其他一个应用流量过大,而导致mongo服务响应变慢,这时我们代码就出现问题了。
当mongo的insert变慢,这势必会占用我们的异步线程池容量,当线程被打满时会出现什么,当然是抛出异常。而我们代码中没有对异常进行捕获,所以后面的请求到这里就直接抛出异常了,主要流程影响使用。
所以,异步线程的使用需要对异常进行捕获,以免影响主流程使用,如下更改就好:

博客以Java代码为例,讲述异步线程执行mongo写入的情况。线程配置看似合理,但当mongo服务因其他应用流量大响应变慢,insert操作变慢会占满异步线程池容量,代码未捕获异常会导致后续请求抛异常影响主流程,强调异步线程使用要捕获异常。
1341

被折叠的 条评论
为什么被折叠?



