springboot使用自定义的线程池 完成 多线程执行网络请求,返回数据后,统一返回给前段

news/2024/12/28 6:34:36/

定义自定义线程池配置类

  • 创建一个ThreadPoolConfig类,用于配置自定义线程池的参数。
java">import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Configuration
public class ThreadPoolConfig {@Beanpublic ExecutorService customThreadPool() {// 核心线程数为5int corePoolSize = 5;// 最大线程数为10int maximumPoolSize = 10;// 线程空闲存活时间为60秒long keepAliveTime = 60;// 时间单位为秒TimeUnit unit = TimeUnit.SECONDS;// 使用有界阻塞队列,容量为100LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(100);return new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);}
}
  • 这个配置类使用@Configuration注解标记,表明它是一个配置类。@Bean注解用于定义一个由 Spring 管理的ExecutorService类型的 Bean,也就是自定义的线程池。这里创建了一个ThreadPoolExecutor对象,设置了核心线程数、最大线程数、线程空闲存活时间、队列容量等参数。

创建网络请求服务类

  • 定义一个NetworkRequestService类,用于执行网络请求。自己找工具类

 

java">import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class NetworkRequestService {private final RestTemplate restTemplate = new RestTemplate();public String makeNetworkRequest(String url) {ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);return response.getBody();}
}

 

编写控制器类来处理多线程网络请求并返回结果给前端

  • 创建一个MultiThreadRequestController类。
java">import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
@RestController
public class MultiThreadRequestController {@Autowiredprivate NetworkRequestService networkRequestService;@Autowiredprivate ExecutorService customThreadPool;@GetMapping("/multi-request")public List<String> multiThreadRequests() throws InterruptedException, ExecutionException {// 定义要请求的URL列表List<String> urls = List.of("https://example1.com", "https://example2.com", "https://example3.com");List<Future<String>> futures = new ArrayList<>();for (String url : urls) {// 提交任务到自定义线程池Future<String> future = customThreadPool.submit(() -> networkRequestService.makeNetworkRequest(url));futures.add(future);}List<String> results = new ArrayList<>();for (Future<String> future : futures) {// 获取每个任务的结果results.add(future.get());}return results;}
}

 

  • 这个类是一个 Spring REST 控制器,使用@RestController注解标记。它通过@Autowired注入了NetworkRequestService和自定义的ExecutorServicemultiThreadRequests方法是一个处理 HTTP GET 请求的端点。它首先定义了一个要请求的URL列表,然后循环将每个网络请求任务提交到自定义线程池,将返回的Future对象保存到futures列表中。接着,它遍历futures列表,通过future.get()方法获取每个任务的结果,将结果保存到results列表中,最后返回results列表给前端。

 


http://www.ppmy.cn/news/1558717.html

相关文章

Python自学 - 变量、数字、计算

1.1 变量 1.1.1 基础知识 PyPI&#xff1a;是一个Python第3方库的网站&#xff0c;收录全球python库开发者的作品。行注释&#xff1a;#号开头块注释&#xff1a;“”" 注释内容 “”", 也可以是单引号&#xff1a;‘’’ 注释内容 ‘’’源文件编码声明&#xff1…

外包干了27天,技术退步明显。。。。。

时光荏苒&#xff0c;转眼我已是一个拥有近四年功能测试经验的大专生。20年&#xff0c;我满怀激情地通过校招进入湖南某知名软件公司&#xff0c;期待在这里开启我的职业生涯。然而&#xff0c;长时间的舒适环境让我渐渐失去了前进的动力&#xff0c;技术停滞不前&#xff0c;…

Unity功能模块一对话系统(1)前置准备

也许你也曾被游戏中的对话系统深深吸引&#xff0c;那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话&#xff0c;往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏&#xff0c;或者计划为你的项目加入一个引人入胜的对话系统&#xff0c;那么 Unity…

iviewui表单验证新手教程

1、表单验证介绍 下面来讲解iviewui表单验证的实现&#xff0c;下面上示例代码&#xff1a; <template><Form ref"formInline" :model"formInline" :rules"ruleInline" inline><FormItem prop"user"><!--prop属…

9. 大数据集群(PySpark)+Hive+MySQL+PyEcharts+Flask:信用贷款风险分析与预测

文章目录 一、大数据集群介绍 1. PySpark简介2. Hive简介3. PyEcharts4. Flask 二、信用贷款数据集介绍 1. 用户基本信息表2.用户登录信息表3. 用户更新信息表 三、信用贷款风险分析 1. 加载数据到Hive仓库2. 基本信息表masterinfo的训练集和测试集合并3.用户信息完善情况与逾…

OSI 七层模型 | TCP/IP 四层模型

注&#xff1a;本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型&#xff08;七层模型&#xff09; BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xf…

王佩丰24节Excel学习笔记——第十九讲:Indirect函数

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 如果indirect引用出错&#xff0c;首先检查一下引用位置的双引号有没有出错&#xff0c;再检查引用值的位置是否出错&#xff0c;如果是双引号出错&#xff0c;可以使用英文状态下输入…

Kotlin 语言基础语法及标准库

基础 Kotlin 变量和数据类型 不可变变量 val关键字 类似java中final关键字&#xff0c;必须有初始值&#xff0c;且不更改变量的值Error:(13, 5) Kotlin: Val cannot be reassigned可变变量var 关键字 var myName "china"类型推断 // 没有指定变量类型&#xf…