sping boot实现线程池异步调用

我们在做项目开发中,有时需要对某个服务进行监控,如果只监控一个服务的话,就不需要使用多线程了,但是如果监控的对象有很多,就需要使用线程池来减少资源的消耗了。
要想使用线程池,就必须先创建一个线程池。spring为我们提供了一个创建线程池的类ThreadPoolTaskExecutor,通过ThreadPoolTaskExecutor对象可以创建一个自定义的线程池:

ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(corePoolSize);// 线程池维护线程的最少数量
taskExecutor.setMaxPoolSize(maxPoolSize);// 线程池维护线程的最大数量
taskExecutor.setQueueCapacity(queueCapacity);// 缓存队列
taskExecutor.setThreadNamePrefix(threadNamePrefix);// 允许的空闲时间
taskExecutor.setKeepAliveSeconds(keepAlive);// 线程名称前缀
taskExecutor.initialize();
return taskExecutor;

线程池已经创建成功了,接下来就是异步的调用线程池里面的每一个线程了。spring boot为我们提供了@EnableAsync和@Async两个注解,通过这两个注解就可以实现异步了。@EnableAsync是写在配置类上的,用于开启异步调用,@Async可以写在类上,也可以写在方法上,意味着异步调用。我是写在了方法上,用来异步调用方法。

    @Async
    public void executeAsyncTask(Object obj) {
    ***
}

这样,你就可以在service层的方法里面调用executeAsyncTask()方法,在executeAsyncTask()方法里面处理你的业务逻辑,从而实现线程池的异步调用。

猜你喜欢

转载自blog.csdn.net/steven_sf/article/details/79105765