1. 在启动类添加@EnableAsync注解
2.自定义线程池
package com.bt.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
public class AsyncConfig {
@Bean("asyncTaskExecutor")
public Executor asyncTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setThreadNamePrefix("Async-Task");
return executor;
}
}
3.编写要异步执行的任务
package com.bt.springboot.task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class UserTask {
@Async("asyncTaskExecutor")
public void getUserInfo(Long userId){
log.info("当前线程:{}", Thread.currentThread().getName());
log.info("获取用户Id为{}的信息:", userId);
}
}
4.编写测试方法
package com.bt.springboot;
import com.bt.springboot.task.UserTask;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.List;
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class ThreadPoolTest {
@Autowired
private UserTask userTask;
@Test
public void test(){
List<Long> userIds = Arrays.asList(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L);
for (Long userId : userIds) {
userTask.getUserInfo(userId);
}
}
}
5.运行测试方法
6.打印日志结果