欧博娱乐城
热门标签

欧博平台 网站数据丢失 | 什么?用@Async会内存溢出?望望你的线程池成立了没!

时间:2023-10-30 06:24    点击次数:151
欧博平台 网站数据丢失

[[424482]]体育平台出租

上一篇咱们先容了何如使用@Async注解来创建异步任务,我不错用这种尺度来完结一些并发操作,以加快任务的本质效果。关联词,淌若仅仅如前文那样平直轻便的创建来使用,可能仍是会遭受一些问题。存在有什么问题呢?先来念念考下,底下的这个接口,通过异步任务加快本质的完结,是否存在问题或风险呢?

太平洋在线正网皇冠您带来最新体育新闻赛事资讯。
@RestController 体育平台出租public class HelloController {      @Autowired     private AsyncTasks asyncTasks;              @GetMapping("/hello")     public String hello() {         // 将不错并行的经管逻辑,拆分红三个异步任务同期本质         CompletableFuture<String> task1 = asyncTasks.doTaskOne();         CompletableFuture<String> task2 = asyncTasks.doTaskTwo();         CompletableFuture<String> task3 = asyncTasks.doTaskThree();                  CompletableFuture.allOf(task1, task2, task3).join();         return "Hello World";     } } 

天然,从单次接口调用来说,是莫得问题的。但当接口被客户端泛泛调用的时候,异步任务的数目就会无数增长:3 x n(n为请求数目),淌若任务经管不够快,就很可能会出现内存溢出的情况。那么为什么会内存溢出呢?压根原因是由于Spring Boot默许用于异步任务的线程池是这么成立的:

www.hg86a.com

皇冠hg86a

图中我标出的两个热切参数是需要热心的:

queueCapacity:缓冲队伍的容量,默许为INT的最大值(2的31次方-1)。 maxSize:允许的最大线程数,默许为INT的最大值(2的31次方-1)。

是以,默许情况下,一般任务队伍就可能把内存给堆满了。是以,咱们实在使用的时候,还需要对异步任务的本质线程池作念一些基础成立,以督察出现内存溢出导致职业不行用的问题。

成立默许线程池

ug环球皇冠现金网

默许线程池的成立很轻便,只需要在成立文献中完成即可,主要有以下这些参数:

spring.task.execution.pool.core-size=2 spring.task.execution.pool.max-size=5 spring.task.execution.pool.queue-capacity=10 spring.task.execution.pool.keep-alive=60s spring.task.execution.pool.allow-core-thread-timeout=true spring.task.execution.shutdown.await-termination=false spring.task.execution.shutdown.await-termination-period= spring.task.execution.thread-name-prefix=task- 

具体成立含义如下:

欧博平台 spring.task.execution.pool.core-size:线程池创建时的开动化线程数,默许为8 spring.task.execution.pool.max-size:线程池的最大线程数,默许为int最大值 spring.task.execution.pool.queue-capacity:用来缓冲本质任务的队伍,默许为int最大值 spring.task.execution.pool.keep-alive:线程停止前允许保合手酣畅的技术 spring.task.execution.pool.allow-core-thread-timeout:是否允许中枢线程超时 spring.task.execution.shutdown.await-termination:是否恭候剩余任务完成后才关闭垄断 spring.task.execution.shutdown.await-termination-period:恭候剩余任务完成的最大技术 spring.task.execution.thread-name-prefix:线程名的前缀,修复好了之后不错便捷咱们在日记中搜检经管任务地方的线程池 动手试一试

咱们平直基于之前chapter7-5的完了来进行如下操作。

冯南山已获委任为公司的公司秘书及根据香港法例第622章公司条例第16部项下的公司的授权代表,以及公司执行董事蔡晨阳已获委任为联交所上市规则第3.05条项下公司的授权代表,均自2023年8月21日起生效,以填补朱先生辞任后的空缺。

网站数据丢失

领先,在莫得进行线程池成立之前,不错先本质一下单位测试:

@Test public void test1() throws Exception {     long start = System.currentTimeMillis();      CompletableFuture<String> task1 = asyncTasks.doTaskOne();     CompletableFuture<String> task2 = asyncTasks.doTaskTwo();     CompletableFuture<String> task3 = asyncTasks.doTaskThree();      CompletableFuture.allOf(task1, task2, task3).join();      long end = System.currentTimeMillis();      log.info("任务一齐完成,总耗时:" + (end - start) + "毫秒"); } 

由于默许线程池的中枢线程数是8,是以3个任务会同期早先本质,日记输出是这么的:

2021-09-15 00:30:14.819  INFO 77614 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 早先作念任务二 2021-09-15 00:30:14.819  INFO 77614 --- [         task-3] com.didispace.chapter76.AsyncTasks       : 早先作念任务三 2021-09-15 00:30:14.819  INFO 77614 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 早先作念任务一 2021-09-15 00:30:15.491  INFO 77614 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 完成任务二,耗时:672毫秒 2021-09-15 00:30:19.496  INFO 77614 --- [         task-3] com.didispace.chapter76.AsyncTasks       : 完成任务三,耗时:4677毫秒 2021-09-15 00:30:20.443  INFO 77614 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 完成任务一,耗时:5624毫秒 2021-09-15 00:30:20.443  INFO 77614 --- [           main] c.d.chapter76.Chapter76ApplicationTests  : 任务一齐完成,总耗时:5653毫秒 

接着,不错尝试在成立文献中加多如下的线程池成立

spring.task.execution.pool.core-size=2 spring.task.execution.pool.max-size=5 spring.task.execution.pool.queue-capacity=10 spring.task.execution.pool.keep-alive=60s spring.task.execution.pool.allow-core-thread-timeout=true spring.task.execution.thread-name-prefix=task- 

日记输出的端正会酿成如下的端正:

2021-09-15 00:31:50.013  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 早先作念任务一 2021-09-15 00:31:50.013  INFO 77985 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 早先作念任务二 2021-09-15 00:31:52.452  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 完成任务一,耗时:2439毫秒 2021-09-15 00:31:52.452  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 早先作念任务三 2021-09-15 00:31:55.880  INFO 77985 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 完成任务二,耗时:5867毫秒 2021-09-15 00:32:00.346  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 完成任务三,耗时:7894毫秒 2021-09-15 00:32:00.347  INFO 77985 --- [           main] c.d.chapter76.Chapter76ApplicationTests  : 任务一齐完成,总耗时:10363毫秒 
任务一和任务二会巧合占用中枢线程,任务三参预队伍恭候 任务一完成,开释出一个中枢线程,任务三从队伍中移出,并占用中枢线程早先经管

 

皇冠客服飞机:@seo3687

皇冠球盘代理

严防:这里可能有的小伙伴会问,最大线程不是5么,为什么任务三是进缓冲队伍,不是创建新线程来经管吗?这里挨次悟缓冲队伍与最大线程间的筹商:惟有在缓冲队伍满了之后才会肯求跳动中枢线程数的线程来进行经管。是以,这里惟有缓冲队伍中10个任务满了,再来第11个任务的时候,才会在线程池中创建第三个线程来经管。这个这里就不具体写列子了,读者不错我方调遣下参数,大致调遣下单位测试来考据这个逻辑。

皇冠体育搭建教程

 



上一篇:亚星私网网站支付失败_苹果 Safari 浏览器 Bug :网站可及时追踪用户最近浏览看成,触及 iOS 15 和 iPadOS 15 统共版块
下一篇:贝博体育博彩平台_41+4+4! 库里成为定约史第一东谈主, 却仍念念联手老伯仲, 悉数冲击总冠军

网友评论