本文介绍: 在上一篇文章中,我们使用多个线程隔离不同的异步任务,这篇文章,我们将围绕在@Async的线程池的拒绝策略进行完善线程池的使用,在我们例举案例之前,我们先了解一下什么情况下才使用@Async的线程拒绝策略@Async的拒绝策略用来解决什么问题,使用他有什么好处?
在上一篇文章中,我们使用多个线程隔离不同的异步任务,这篇文章,我们将围绕在@Async的线程池的拒绝策略进行完善线程池的使用,在我们例举案例之前,我们先了解一下:
接下来,我们看一个案例:
我们先创建一个Spring Boot应用,创建好我们的线程池配置。
如上,我们创建了一个核心线程数为2,最大线程数为2,缓冲队列长度为2,假设我们有五个异步任务同时开始,那么会造成什么情况呢?
我们来对报错日志进行分析:
[java.util.concurrent.ThreadPoolExecutor@5580d62f[Running, pool size = 2, active threads = 2, queued tasks = 2, completed tasks = 0]] did not accept task:
这段代码中,我们可以明确的知道,在我们的超过了执行线程 + 缓冲队列长度,也就是 2 + 2 = 4 ,但是我们进来了5个线程,所以我们的第五个线程就被拒绝了。
所以,在默认情况之下,我们的线程池的拒绝策略就是:
当线程池队列满了,那么我们的线程池就会丢弃这个任务,并抛出异常。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。