zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Spring Boot 2.x多线程--使用@Async开启多线程使用示例

SpringBoot多线程async -- 示例 开启 使用
2023-09-14 09:02:02 时间

Spring Boot 2.x多线程–使用@Async开启多线程,配置类+启动类注解,搞定多线程任务。

配置类TaskPoolConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @ProjectName springbootdemo_src
 * @ClassName TaskPoolConfig
 * @Desicription TODO
 * @Author Zhang Xueliang
 * @Date 2019/5/15 10:10
 * @Version 1.0
 **/
@Configuration
public class TaskPoolConfig {
    @Bean("taskExecutor-zhangxueliang")
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);//核心线程数目
        executor.setMaxPoolSize(20);//指定最大线程数
        executor.setQueueCapacity(200);//队列中最大的数目
        executor.setKeepAliveSeconds(60);//线程空闲后的最大存活时间
        executor.setThreadNamePrefix("zhangxueliang-taskExecutor-");//线程名称前缀
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}

在启动类ZxlDemoApplication.java添加@EnableAsync注解(注意:@EnableAsync注解既可以添加到启动类也可以直接添加到配置类上面,效果一样。如果要扫描特定的包,使用@ComponentScan包扫描注解指定报名即可)

@SpringBootApplication
@EnableAsync//开启异步
public class ZxlDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZxlDemoApplication.class, args);
	}

}

使用@Async注解标注要使用多线程的方法或类,加在类上,该类所有的方法都将是异步执行。

    @Async
    public Future<String> doReturn(int i){
        logger.info(">>>>>>>>>>>>>>线程名>>>>>>>>>>>>>>"+Thread.currentThread().getName());
        try {
            // 这个方法需要调用500毫秒
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 消息汇总
        return new AsyncResult<>(String.format("这个是第{%s}个异步调用的证书", i));
    }