当前位置:   article > 正文

SpringBoot多线程的实现_springcloud多线程实现

springcloud多线程实现

1. 多线程

在我们的系统中,经常会处理一些耗时任务,就会想到使用多线程,JDK给我们提供了非常方便的操作线程的API,为什么还要使用Spring来实现多线程呢?
在Springboot中,针对多线程以及线程池,提供了 @EnableAsync 以及 @Async 两个注解

// 启用异步任务
@EnableAsync  
 
// 可以使用在类或方法上,这里进行标注为异步任务,在执行时,会单独开启线程来执行(指定线程池的名字)
@Async("XXXX")
  • 1
  • 2
  • 3
  • 4
  • 5

2.springBoot中配置多线程,线程池

Spring中实现多线程,只需要在配置类中添加 @EnableAsync就可以使用多线程。在希望执行的并发任务的方法中使用 @Async 就可以定义一个线程任务。通过spring给我们提供的ThreadPoolTaskExecutor 就可以使用线程池。

@EnableAsync // 启用异步任务
@Configuration
public class ThreadConfig {

    /**
     * 配置线程池
     */
    // 声明一个线程池(并指定线程池的名字)
    @Bean("taskExecutor")
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
        // 最小线程数量
        poolTaskExecutor.setCorePoolSize(3);
        // 最大线程数据量
        poolTaskExecutor.setMaxPoolSize(1024);
        // 等待队列
        poolTaskExecutor.setQueueCapacity(256);
        // 初始化
        poolTaskExecutor.initialize();
        //允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
        poolTaskExecutor.setKeepAliveSeconds(60);
        return poolTaskExecutor;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

配置完成之后紧接着使用多线程

3.springBoot使用线程池

只需要在@Async注解中指定线程池名即可,比如:

@Service
public class HandBrakeService {

    @Async("taskExecutor")
    public void transCoding(String link, String linkName) throws Exception{

        // 读取RTSP视频资源
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(link);
        // 设置分辨率宽度
        int captureWidth = 1280;
        grabber.setImageWidth(captureWidth);
        // 设置分辨率高度
        int captureHeight = 720;
        grabber.setImageHeight(captureHeight);
        // rtsp格式一般添加TCP配置,否则丢帧会比较严重
        grabber.setOption("rtsp_transport", "tcp");
        grabber.start();
        ......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

接下来运行自己的代码就可以看到效果了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/52453
推荐阅读
相关标签
  

闽ICP备14008679号