Springboot中使用多线程

Spring是通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor来创建一个基于线城池的TaskExecutor。在使用线程池的大多数情况下都是异步非阻塞的。我们配置注解@EnableAsync可以开启异步任务。然后在实际执行的方法上配置注解@Async上声明是异步任务。
                                        ------摘抄自书籍《JavaEE开发的颠覆者 Spring Boot实战 》

关键代码:
配置类代码:
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {

@Override
public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    //核心线程数
    taskExecutor.setCorePoolSize(20);
    //最大线程数
    taskExecutor.setMaxPoolSize(40);

    taskExecutor.setQueueCapacity(100);
    executor.setKeepAliveSeconds(60);
    executor.setThreadNamePrefix("taskExecutor-");
    executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
    executor.setWaitForTasksToCompleteOnShutdown(true);
    executor.setAwaitTerminationSeconds(60);
    taskExecutor.initialize();
    return taskExecutor;
}

}

任务执行代码:

@Servicepublic class AsyncService {
@Async
public void executeAsync() {
//业务逻辑代码
......
}
}

通过@Async注解表明该方法是异步方法,如果注解在类上,那表明这个类里面的所有方法都是异步的。这里的方法自动被注入使用配置的ThreadPoolTaskExecutor作为TaskExecutor。

你可能感兴趣的:(Springboot中使用多线程)