首页 > 编程语言 > 详细

springboot @async线程池使用以及oom问题

时间:2021-05-28 09:32:34      阅读:23      评论:0      收藏:0      [点我收藏+]

springboot @async线程池使用以及oom问题

声明线程池

import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;
import?org.springframework.scheduling.annotation.EnableAsync;
import?org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import?java.util.concurrent.ThreadPoolExecutor;


@Configuration
@EnableAsync
public?class?ExecutorConfig1?{

????@Bean("taskExecutor")
????public?ThreadPoolTaskExecutor?threadPoolTaskExecutor()?{
????????ThreadPoolTaskExecutor?threadPoolTaskExecutor?=?new?ThreadPoolTaskExecutor();
????????threadPoolTaskExecutor.setCorePoolSize(10);
????????threadPoolTaskExecutor.setMaxPoolSize(10);
????????threadPoolTaskExecutor.setQueueCapacity(20);
????????threadPoolTaskExecutor.setKeepAliveSeconds(3000);
????????threadPoolTaskExecutor.setThreadNamePrefix("Async-Service-");
????????threadPoolTaskExecutor.setRejectedExecutionHandler(new?ThreadPoolExecutor.CallerRunsPolicy());
????????return?threadPoolTaskExecutor;
????}
}

业务逻辑类

import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.stereotype.Component;

import?java.util.ArrayList;


@Component
public?class?QueryDataExec?{

????@Autowired
????private?TaskDataExec?taskDataExec;

????public?void?execData()?{
????????ArrayList

逻辑执行类,注意@Asycn 的处理类不能和调用一个类

import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;
import?org.springframework.scheduling.annotation.Async;
import?org.springframework.stereotype.Component;


@Component
public?class?TaskDataExec?{
????Logger?log?=?LoggerFactory.getLogger(TaskDataExec.class);

????@Async("taskExecutor")
????public?void?taskDataExec(String?id)?{
????????log.info("开始处理:"?+?id);
????????log.info("完成处理:"?+?id);
????}
}

测试类

import?org.junit.jupiter.api.Test;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class?UdpApplicationTests?{

????@Test
????void?contextLoads()?{
????????System.out.println("123");
????}

????@Autowired
????private?QueryDataExec?queryDataExec;

????@Test
????public?void?dataExecTest()?{
????????queryDataExec.execData();
????}
}

效果,注意Async-Service后面的数字是对应的线程池

2021-04-13?16:17:19.290??INFO?7280?---?[Async-Service-1]?com.udp.TaskDataExec?????????????????????:?开始处理:id-0
2021-04-13?16:17:19.291??INFO?7280?---?[Async-Service-1]?com.udp.TaskDataExec?????????????????????:?完成处理:id-0
2021-04-13?16:17:19.292??INFO?7280?---?[Async-Service-3]?com.udp.TaskDataExec?????????????????????:?开始处理:id-2
2021-04-13?16:17:19.292??INFO?7280?---?[Async-Service-3]?com.udp.TaskDataExec?????????????????????:?完成处理:id-2
2021-04-13?16:17:19.303??INFO?7280?---?[Async-Service-2]?com.udp.TaskDataExec?????????????????????:?开始处理:id-1
2021-04-13?16:17:19.303??INFO?7280?---?[Async-Service-2]?com.udp.TaskDataExec?????????????????????:?完成处理:id-1
2021-04-13?16:17:19.304??INFO?7280?---?[Async-Service-4]?com.udp.TaskDataExec?????????????????????:?开始处理:id-3
2021-04-13?16:17:19.306??INFO?7280?---?[Async-Service-4]?com.udp.TaskDataExec?????????????????????:?完成处理:id-3
2021-04-13?16:17:19.309??INFO?7280?---?[Async-Service-5]?com.udp.TaskDataExec?????????????????????:?开始处理:id-4
2021-04-13?16:17:19.309??INFO?7280?---?[Async-Service-5]?com.udp.TaskDataExec?????????????????????:?完成处理:id-4
2021-04-13?16:17:19.312??INFO?7280?---?[Async-Service-6]?com.udp.TaskDataExec?????????????????????:?开始处理:id-5
2021-04-13?16:17:19.312??INFO?7280?---?[Async-Service-6]?com.udp.TaskDataExec?????????????????????:?完成处理:id-5
2021-04-13?16:17:19.315??INFO?7280?---?[Async-Service-7]?com.udp.TaskDataExec?????????????????????:?开始处理:id-6
2021-04-13?16:17:19.316??INFO?7280?---?[Async-Service-7]?com.udp.TaskDataExec?????????????????????:?完成处理:id-6
2021-04-13?16:17:19.316??INFO?7280?---?[sync-Service-10]?com.udp.TaskDataExec?????????????????????:?开始处理:id-9
2021-04-13?16:17:19.316??INFO?7280?---?[sync-Service-10]?com.udp.TaskDataExec?????????????????????:?完成处理:id-9
2021-04-13?16:17:19.316??INFO?7280?---?[Async-Service-8]?com.udp.TaskDataExec?????????????????????:?开始处理:id-7
2021-04-13?16:17:19.317??INFO?7280?---?[Async-Service-8]?com.udp.TaskDataExec?????????????????????:?完成处理:id-7
2021-04-13?16:17:19.318??INFO?7280?---?[Async-Service-9]?com.udp.TaskDataExec?????????????????????:?开始处理:id-8
2021-04-13?16:17:19.318??INFO?7280?---?[Async-Service-9]?com.udp.TaskDataExec?????????????????????:?完成处理:id-8

说一说@Async默认的效果每次调用都创建新的线程,具体可以看看这个文章
https://blog.csdn.net/ignorewho/article/details/85603920

springboot @async线程池使用以及oom问题

原文:https://blog.51cto.com/xiaoshahai/2824429

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!