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
上一篇: 华为云怎么样,华为云技术水平怎么样