spring boot 实现多线程

配置类


配置类开启异步支持需要添加@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);
    }

猜你喜欢

转载自blog.csdn.net/qq_32786139/article/details/88797881