声明线程池
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
原文:https://blog.51cto.com/xiaoshahai/2824429