springboot实现多线程

1.实现方式

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

2.样例

  1. 创建线程配置类
/**
 * 线程配置类
 */
@Configuration
@EnableAsync
public class ThreadTestConfig implements AsyncConfigurer {

    /**
     *  ThreadPoolTaskExecutor的处理流程
     *  当池子大小小于corePoolSize,就新建线程,并处理请求
     *  当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去workQueue中取任务并处理
     *  当workQueue放不下任务时,就新建线程放入线程池,并处理请求,如果池子大小撑到了maximumPoolSize,就用RejectedExecutionHandler来做拒绝处理
     *  当池子的线程数大于corePoolSize时,多余的线程会等待keepAliveTime长时间,如果无请求可处理就自行销毁
     * @return
     */
    @Override
    @Bean
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor tp = new ThreadPoolTaskExecutor();
        //设置核心线程数
        tp.setCorePoolSize(10);
        //设置最大线程数
        tp.setMaxPoolSize(100);
        //线程使用的缓冲队列
        tp.setQueueCapacity(10);
        //设置程序关闭时要等待线程全部执行完
        tp.setWaitForTasksToCompleteOnShutdown(true);
        //设置等待时间,超过等待时间后立即停止
        tp.setAwaitTerminationSeconds(60);
        //线程名称前缀
        tp.setThreadNamePrefix("Test-Async-");
        //初始化线程
        tp.initialize();
        return tp;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {

        return null;
    }
}
  1. 编写Service
public interface ThreadTestService {
    void executeThread(int i);
}
  1. 实现Service
@Service
public class ThreadTestServiceImpl implements ThreadTestService {
    @Override
    @Async
    public void executeThread(int i) {
        System.out.println("线程"+Thread.currentThread().getName()+"执行异步任务"+i);
    }
}
  1. 编写controller
@RestController
public class ThreadTestController {
    @Autowired
    private ThreadTestService threadTestService;

    @RequestMapping("test")
    public Object t1() {
        for (int i = 1; i < 100; i++) {
            threadTestService.executeThread(i);
        }
        return "Ok";
    }
}
  1. 运行程序,进入前端后查看后端数据
    在这里插入图片描述
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐