【juc】future并行执行并获取返回值

目录

        • 一、截图示例
        • 二、代码示例
          • 2.1 接口示例
          • 2.2 调用示例

一、截图示例

在这里插入图片描述

二、代码示例
2.1 接口示例
package com.learning.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;
import java.util.Random;/*** @Author wangyouhui* @Description TODO**/
@RestController
@RequestMapping("info")
@Slf4j
public class InfoController {@GetMapping("/order/{id}")public Map<String, Object> orderDetail(@PathVariable Long id){log.info("开始查找订单: {}", id);try {Random random = new Random();Thread.sleep(2000 + random.nextInt(2000));} catch (InterruptedException e) {e.printStackTrace();}Map<String, Object> result = new HashMap<>();result.put("id", id);result.put("total", 1300);log.info("查找订单结束: {}", id);return result;}@GetMapping("/product/{id}")public Map<String, Object> productDetail(@PathVariable Long id){log.info("开始查找产品: {}", id);try {Random random = new Random();Thread.sleep(500 + random.nextInt(2000));} catch (InterruptedException e) {e.printStackTrace();}Map<String, Object> result = new HashMap<>();if(id == 1){result.put("id", id);result.put("price", 300);result.put("name", "小米耳机");}else{result.put("id", id);result.put("price", 1000);result.put("name", "三星硬盘");}log.info("开始查找产品: {}", id);return result;}@GetMapping("/package/{id}")public Map<String, Object> packageDetail(@PathVariable Long id){log.info("开始查找快递: {}", id);try {Random random = new Random();Thread.sleep(3000 + random.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}Map<String, Object> result = new HashMap<>();result.put("id", id);result.put("name", "中通快递");result.put("id", id);log.info("开始查找快递: {}", id);return result;}
}
2.2 调用示例
package com.learning.future;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.client.RestTemplate;import java.util.Map;
import java.util.concurrent.*;/*** @Author wangyouhui* @Description future并发执行,获取有返回值的结果**/
@Slf4j
public class Learning_01 {public static void main(String[] args) {System.out.println("查询信息开始");long begin = System.currentTimeMillis();log.info("开始时间: {}", begin);ExecutorService executorService = Executors.newCachedThreadPool();RestTemplate restTemplate = new RestTemplate();Future<Map<String,Object>> future1 = executorService.submit(() -> {return restTemplate.getForObject("http://127.0.0.1:8080/info/order/{1}", Map.class, 1);});Future<Map<String,Object>> future2 = executorService.submit(()->{return restTemplate.getForObject("http://127.0.0.1:8080/info/product/{1}", Map.class, 1);});Future<Map<String,Object>> future3 = executorService.submit(()->{return restTemplate.getForObject("http://127.0.0.1:8080/info/product/{1}", Map.class, 2);});Future<Map<String,Object>> future4 = executorService.submit(()->{return restTemplate.getForObject("http://127.0.0.1:8080/info/package/{1}", Map.class, 1);});try {Map<String, Object> map1 = future1.get();Map<String, Object> map2 = future2.get();Map<String, Object> map3 = future3.get();Map<String, Object> map4 = future4.get();log.info("订单信息: {}", map1);log.info("产品1信息: {}", map2);log.info("产品2信息: {}", map3);log.info("快递信息: {}", map4);} catch (Exception e) {e.printStackTrace();}executorService.shutdown();long end = System.currentTimeMillis();log.info("结束时间: {}", end);log.info("查询信息结束, 总耗时: {}", end-begin);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128536.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32之freeRTOS驱动小车

该文章记录将stm32之智能小车总结移植到freeRTOS上&#xff0c;期间也遇到了好些问题&#xff0c;这里做下记录。也是对freeRTOS的一个应用实践。 一、freeRTOS工程的创建 工程是利用CubeMX进行创建的&#xff0c;挺简单的&#xff0c;有空再试下手动移植freeRTOS。 启用软件定…

LLMs 生成式人工智能项目生命周期备忘单Generative AI Project Lifecycle Cheat Sheet

到目前为止&#xff0c;在本课程中&#xff0c;从选择模型到微调模型&#xff0c;再到将其与人类偏好对齐&#xff0c;这一切都将在您部署应用程序之前发生。为了帮助您规划生成式AI项目生命周期的各个阶段&#xff0c;这个速查表提供了每个工作阶段所需的时间和精力的一些指示…

关于 “高可用集群” 的 从业经验漫谈

关于高可用集群 PART 1 高可用的概念 高可用&#xff08;High Availability&#xff09;是高可用集群&#xff08;High Availability Cluster&#xff09;的简称&#xff0c;至少由2台服务器组成&#xff0c;一般指的是应用服务对客户端的持续可用。高可用集群可以借助多种技术…

Javascript笔记:Web页面中的事件处理

1 任务队列 2事件处理&#xff1a;⼀个只有宏任务的示例 3 Web⻚⾯中的事件处理 3.1 定时器与事件处理&#xff1a;一个实例 4 Web⻚⾯中的事件处理 5 事件在DOM中的传播 5.1 两个阶段

数据结构 | (三) Stack

栈 &#xff1a;一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作 。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&#xff1a;栈…

ES6 class类关键字super

super关键字 在 JavaSCript 中&#xff0c;能通过 extends 关键字去继承父类 super 关键字在子类中有以下用法&#xff1a; 当成函数调用 super() 作为 "属性查询" super.prop 和 super[expr] super() super 作为函数调用时&#xff0c;代表父类的构造函数。 ES6 要求…

stm32的时钟、中断的配置(针对寄存器),一些基础知识

一、学习参考资料 &#xff08;1&#xff09;正点原子的寄存器源码。 &#xff08;2&#xff09;STM32F103最小系统板开发指南-寄存器版本_V1.1&#xff08;正点&#xff09; &#xff08;3&#xff09;STM32F103最小系统板开发指南-库函数版本_V1.1&#xff08;正点&#xff0…

基于可解释性特征矩阵与稀疏采样全局特征组合的人体行为识别

论文还未发表&#xff0c;不细说&#xff0c;欢迎讨论。 Title: A New Solution to Skeleton-Based Human Action Recognition via the combination usage of explainable feature extraction and sparse sampling global features. Abstract: With the development of deep …

查看当前目录下文件所占用内存 du -sh

1. du -sh 查看当前目录下文件所占用内存 2.查看当前文件夹下&#xff0c;每个文件所占用内存 du -ah --max-depth1/

《DevOps 精要:业务视角》- 读书笔记(二)

DevOps 精要:业务视角&#xff08;二&#xff09; 第2章 基础2.1 精益生产2.1.1 关键事实2.1.2 挑战 2.2 敏捷2.2.1 关键事实2.2.2 挑战 第2章 基础 2.1 精益生产 2.1.1 关键事实 正如1.2节提到的&#xff0c;DevOps非常依赖于精益生产的原则与实践。有些人甚至相信&#xf…

2023年中国智慧医院市场现状及行业发展趋势分析[图]

自&#xff12;&#xff10;&#xff11;&#xff19;年开始&#xff0c;国家卫健委首次提出了智慧医院这一概念ꎬ并明确提出包含的三个方面&#xff0c;即:一是智慧医疗方面&#xff0c;主要面向医院所有医务人员使用者&#xff0c;以深层次提升医院信息化建设为目标ꎬ规范参照…

如何实现 Es 全文检索、高亮文本略缩处理

如何实现 Es 全文检索、高亮文本略缩处理 前言技术选型JAVA 常用语法说明全文检索开发高亮开发Es Map 转对象使用核心代码 Trans 接口&#xff08;支持父类属性的复杂映射&#xff09;Trans 接口的不足真实项目落地效果 前言 最近手上在做 Es 全文检索的需求&#xff0c;类似于…