springboot中如何使用线程池及异步线程

原创 2018年04月17日 01:16:13

有一些业务需求,需要是异步进行的,不能影响当前线程的运行,在spring boot中则能通过注解和配置快速实现这个。

首先写个异步线程池配置类,如下:

@Configuration
@EnableAsync
public class AsyncConfig {

    @Value("${async.executor.thread.core_pool_size}")
    private int corePoolSize;

    @Value("${async.executor.thread.max_pool_size}")
    private int maxPoolSize;

    @Value("${async.executor.thread.queue_capacity}")
    private int queueCapacity;

    private String threadNamePrefix = "AsyncExecutorThread-";

    @Bean(name = "asyncExecutor")
    public Executor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix(threadNamePrefix);
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }

}

然后将需要异步执行的业务步骤写成方法用@sync注解即可,如下:

@Component
public class AsyncExecutorCommon {
    @Async("asyncExecutor")
    public void loadPic(IfcTingshenJzml tsJzml,
            WsTingshenJzmlService wsTingshenJzmlService) {
        List<IfcTingshenJzml> tsJzmls = new ArrayList<IfcTingshenJzml>();
        tsJzmls.add(tsJzml);
        wsTingshenJzmlService.docService(tsJzmls);
    }
}

在业务代码里直接调用这个方法即可,这个方法的执行就是异步的。注意,异步方法和调用异步的方法不能写在一个类里,否则会报循环依赖异常,建议另建一个类,只用来放异步方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35033270/article/details/79968974

spring boot / cloud (四) 自定义线程池以及异步处理@Async

spring boot / cloud (四) 自定义线程池以及异步处理@Async前言什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线...
  • wangkang80
  • wangkang80
  • 2017-05-27 10:12:34
  • 2399

springboot中异步线程调用问题

1.原始线程总结 我们在使用多线程的时候,往往需要创建Thread类,或者实现Runnable接口,如果要使用到线程池,我们还需要来创建Executors。 2.spring线程 只要要@Ena...
  • qq_31463999
  • qq_31463999
  • 2018-01-31 17:47:06
  • 149

Spring Boot系列二 Spring @Async异步线程池用法总结

Spring异步线程池的接口类, @Async, @AsyncUncaughtExceptionHandler ,@EnableAsync
  • hry2015
  • hry2015
  • 2017-03-28 19:16:48
  • 20596

spring boot 多线程,异步方法和异步类的注解使用

spring boot 多线程 spring通过任务执行器TaskExecutor,来实现多线程和并发编程,使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecut...
  • boss_way
  • boss_way
  • 2017-10-30 10:23:04
  • 496

spring boot-执行Async任务时,使用自定义的线程池

在前面的博客中,http://blog.csdn.net/liuchuanhong1/article/details/54605697 我们使用了spring boot的异步操作,当时,我们使用的是默...
  • liuchuanhong1
  • liuchuanhong1
  • 2017-03-20 20:16:01
  • 17614

项目解析-spring异步线程池配置与使用

一、Spring配置 实际项目简单配置 较完整参考 ...
  • a544879146
  • a544879146
  • 2017-05-03 09:39:23
  • 1806

多线程 | CompletionService异步非阻塞获取并行任务执行结果

多线程 | CompletionService异步获取并行任务执行结果,主要分两点来讨论CompletionService: 1)使用方式 2)源码分析 1)使用方式 使用Fu...
  • woshilijiuyi
  • woshilijiuyi
  • 2018-01-04 14:22:12
  • 106

OKHttp3源码分析<CacheThreadPool线程池异步请求任务的执行>

1.线程池的好处几乎所有需要异步操作或者并发执行任务的程序都可以使用线程池,三个好处: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度:当任务到达的时...
  • Gpwner
  • Gpwner
  • 2017-03-06 22:53:30
  • 1629

在spring boot中使用java线程池ExecutorService

1. 认识java线程池1.1 在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.需处理的任务的数量大 1.2 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销...
  • u012373815
  • u012373815
  • 2018-01-02 21:52:35
  • 1821

spring-boot 线程池 @Async 的使用、自定义Executor的配置方法

简单几步,实现异步新线程调用。 1、在主类中添加@EnableAsync注解: [java] view plain copy @S...
  • majer_yu
  • majer_yu
  • 2017-12-22 10:17:51
  • 438
收藏助手
不良信息举报
您举报文章:springboot中如何使用线程池及异步线程
举报原因:
原因补充:

(最多只允许输入30个字)