SpringBoot & 线程池 整合

Spring Boot 线程池的运用在这里插入图片描述

  1. 创建线程池将对象交给Spring进行管理
@Configuration
@EnableAsync
public class ExecutePoolTask {
    
    
    @Bean
    public Executor myTaskAsyncPool() {  
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(50);  
        executor.setMaxPoolSize(100);  
        executor.setQueueCapacity(30);  
        executor.setKeepAliveSeconds(60);  
        executor.setThreadNamePrefix("thread-executor-");  
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务  
        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行  
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());  
        executor.initialize();  
        return executor;  
    }  
    
    
}

2.在对应的方法上添加@Async(“myTaskAsyncPool”) “myTaskAsyncPool” 为 方法名

@Component
public class AsyncTask {
    private static final Logger logger = LoggerFactory.getLogger(AsyncTask.class);
    @Async("myTaskAsyncPool")
    public void saveLoginInfor(String ip) {
        logger.info("Task"+ip+" started.");
    }
}

3.开启测试

@SpringBootTest
class AsyncDemoApplicationTests {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    private AsyncTask asyncTask;

    @Test
    void contextLoads() {
        for (int i = 0; i < 100; i++) {
            asyncTask.saveLoginInfor(i+"");
        }

        logger.info("All tasks finished.");

    }

}

总结:

目前还没有想到使用场景

你可能感兴趣的:(SpringBoot,spring,java,spring,boot)