欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot 实现多线程

程序员文章站 2022-05-01 13:04:11
...

配置类


配置类开启异步支持需要添加@EnableAsync注解。

配置类实现接口AsyncConfigurator,返回一个ThreadPoolTaskExecutor线程池对象

配置最小线程数、最大线程数、等待队列

@ComponentScan("com.lgh.service")也可添加这个注解来配置扫描service包下的
@Configuration
//开启异步支持
@EnableAsync
public class AsyncTaskConfig implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(5);// 最小线程数
        taskExecutor.setMaxPoolSize(10);// 最大线程数
        taskExecutor.setQueueCapacity(25);// 等待队列

        taskExecutor.initialize();

        return taskExecutor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

ThredPoolTaskExcutor的处理流程

当当前线程池大小小于 corePoolSize (最小线程数)则创建新的线程,并处理请求
当当前线程池大小等于 corePoolSize 则会将请求放入workQueue中,线程池中的空闲线程就去workQueue中取任务并处理
当workQueue放不下任务时,就新建线程入池,并处理请求,如果池子大小达到了了maximumPoolSize(最大线程数),就用RejectedExecutionHandler来做拒绝处理
当池子的线程数大于 corePoolSize 时,多余的线程会等待keepAliveTime长时间,如果无请求可处理就自行销毁

配置多线程

@Async注解,注明此...为异步,可加在类上,表明此类下的方法都为异步方法,也可加在方法上,表明此方法为异步方法

@Async
    public void executeAsyncTask(Integer i){
        System.out.println("执行异步任务:" + i);
    }