执行异步任务后有一个线程池以管理执行任务。为了控制异步任务的并发,它不会影响应用程序的正常操作,我们必须进行线程的相应分配池以防止资源过渡使用。除了默认线程池的配置外,还有一种类型的场景,也很常见,即在多个任务下的线程池隔离。
一些朋友可能不知道线程池的隔离是什么,为什么是隔离的?Essenceso,让我们看一下以下场景案例:
在上面的代码中,有两个API接口。在这两个接口的特定执行逻辑中,执行过程分为三个异步任务。
好吧,请考虑一分钟,想一想。如果实施,有什么问题吗?
上面的代码在API请求中不高。同时,如果每个任务的处理速度足够快,则没有问题。但是当发布或一个处理过程中,将其拉动后腿。这些提供无关服务的两个接口可能会互相影响例如:假设当前线程池中配置的最大线程数。目前,/api-1接口中的tast1和task2非常慢,并且被阻止。然后,当用户调用API-2接口时,此服务ISIT也将阻止!
该场景的原因是:默认情况下,创建创建的所有异步任务都是共享的线程池,因此,当有一些异步任务遇到性能问题时,它将直接影响其他异步任务。
为了解决此问题,我们需要对异步任务进行某个线程池隔离,以使不同的异步任务不会彼此影响。
下面,让我们开始实际操作!
步骤1:例如,初始化多个线程池,如下:
注意:线程名称的前缀是在此处专门设置的,这可以促进后续执行的顺序。
步骤2:创建异步任务并指定要使用的线程池的名称
此处定义了线程池的名称。从第一步中,我们没有详细编写两个线程池bean的名称,因此默认情况下将使用该方法名称,即和谐。
步骤3:写一个单元测试以验证如下:
在上述单元测试中,总共启动了6个异步任务。前三个使用的线池1,后三个使用的线池2。
不要先执行,根据核心线程2和最大线程2分析,它可能会执行?
分析后,执行下部单元测试以查看是否是:
好的,今天的研究就是这样!
本文中的完整项目可以在仓库中的目录中查看该项目:
作者:程序APE DD