欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot多线程的实现

程序员文章站 2022-06-24 19:09:48
1. 多线程在我们的系统中,经常会处理一些耗时任务,就会想到使用多线程,JDK给我们提供了非常方便的操作线程的API,为什么还要使用Spring来实现多线程呢?在Springboot中,针对多线程以及线程池,提供了 @EnableAsync 以及 @Async 两个注解// 启用异步任务@EnableAsync // 可以使用在类或方法上,这里进行标注为异步任务,在执行时,会单独开启线程来执行(指定线程池的名字)@Async("XXXX")2.springBoot中配置多线程,线程池...

1. 多线程

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

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

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;
    }
}

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

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();
        ......

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

本文地址:https://blog.csdn.net/weixin_44321975/article/details/110858787

相关标签: java