FutureTask和CompletableFuture的模拟使用
模拟了查询耗时操作,并使用FutureTask和CompletableFuture分别获取计算结果,统计执行时长
package org.alllearn.futurtask;import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.FutureTask;
import java.util.stream.Collectors;public class CompletableFutureTest {public static void main(String[] args) {CompletableFutureTest test = new CompletableFutureTest();List<User> users = test.getUsers();//流计算的简单使用Stopwatch started = Stopwatch.createStarted();double average = users.stream().mapToInt(User::getAge).average().getAsDouble();System.out.println(average + " " + started.elapsed());//模拟通过id集合去其他表批量查询数据//单线程任务分割,数据库承受不了大量id的in查询List<List<User>> partition1 = Lists.partition(users, users.size() / 200);started.reset();started.start();double average1 = partition1.stream().mapToDouble(test::select).average().getAsDouble();System.out.println(average1 + " " + started.elapsed());//多线程任务两种方案FutureTask、CompletableFutureint cpu = Runtime.getRuntime().availableProcessors();//计算密集型cpu+1,io密集型cpu*2ForkJoinPool forkJoinPool = new ForkJoinPool(cpu + 1);List<List<User>> partition2 = Lists.partition(users, users.size() / 200);//FutureTaskstarted.reset();started.start();double average2 = partition2.stream().map(u -> {FutureTask<Double> futureTask = new FutureTask<>(() -> test.select(u));forkJoinPool.submit(futureTask);return futureTask;}).collect(Collectors.toList()).stream().mapToDouble(f -> {try {return f.get();} catch (InterruptedException | ExecutionException e) {throw new RuntimeException(e);}}).average().getAsDouble();System.out.println(average2 + " " + started.elapsed());//CompletableFuturestarted.reset();started.start();double average3 = partition2.stream().map(u -> CompletableFuture.supplyAsync(() -> test.select(u), forkJoinPool)).collect(Collectors.toList()).stream().mapToDouble(CompletableFuture::join).average().getAsDouble();forkJoinPool.shutdown();System.out.println(average3 + " " + started.elapsed());}//模拟查询耗时public Double select(List<User> user) {try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}return 1D;//return Math.random();}//模拟获取用户public List<User> getUsers() {List<User> users = new ArrayList<>();for (int i = 0; i < 20000; i++) {users.add(new User(i, "user" + i, 1));}return users;}@Getter@Setter@AllArgsConstructorstatic class User {private int id;private String name;private int age;}}
相关文章:
FutureTask和CompletableFuture的模拟使用
模拟了查询耗时操作,并使用FutureTask和CompletableFuture分别获取计算结果,统计执行时长 package org.alllearn.futurtask;import com.google.common.base.Stopwatch; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; imp…...
Redis作为缓存,mysql的数据如何与redis进行同步?
Redis作为缓存,mysql的数据如何与redis进行同步? 一定要设置前提,先介绍业务背景 延时双删 双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 读操作:缓存命中,直接返回;缓存未…...
申请免费 SSL 证书为您的小程序加密通信
在今天的网络环境中,数据安全和隐私保护变得尤为重要。无论是网站还是应用程序,为其提供安全的通信渠道都是至关重要的。对于小程序开发者来说,使用 SSL(Secure Sockets Layer)证书可以有效地保障用户数据的安全&#…...
Go 并发编程
并发编程 1.1 并发与并⾏ 并⾏与并发是两个不同的概念,普通解释: 并发:交替做不同事情的能⼒并⾏:同时做不同事情的能⼒ 如果站在程序员的⻆度去解释是这样的: 并发:不同的代码块交替执⾏并⾏…...
鱼眼相机去畸变(图像拉直/展开/矫正)算法及实战总结
本文介绍两种方法 1、经纬度矫正法 2、棋盘格矫正法 一、经纬度矫正法 1、算法说明 经纬度矫正法, 可以把鱼眼图想象成半个地球, 然后将地球展开成地图,经纬度矫正法主要是利用几何原理, 对图像进行展开矫正。 经过P点的入射光线…...
es6 数据类型
es6 数据类型 map 数据类型 >Map 对象保存键值对。 用途 : Object的key无法支持该数据时需要了解对象大小时 map 数据类型任何值(对象或者原始值) 都可以作为一个键。 Object 的键只能是字符串 let myMap new Map(); let myMap1 new Map(); var keyStrin…...
【postgresql】
看到group by 1,2 和 order by 1, 2。看不懂,google,搜到了Stack Overflow 上有回答 What does SQL clause “GROUP BY 1” mean? 大概意思就是,group by, order by 后面跟数字,指的是 selec…...
【C++】空间配置器 allocator:原理及底层解析
文章目录 空间配置器一级空间配置器二级空间配置器1. 内存池2. SGI-STL中二级空间配置器设计 - - 哈希桶3. 二级空间配置器的空间申请 空间配置器的默认选择空间配置器的在封装:添加了数据类型大小空间配置器对象的构造与析构 容器中的 allocator 空间配置器 提到空…...
微信小程序 movable-area 区域拖动动态组件演示
movable-area 组件在小程序中的作用是用于创建一个可移动的区域,可以在该区域内拖动视图或内容。这个组件常用于实现可拖动的容器或可滑动的列表等交互效果。 使用 movable-area 组件可以对其内部的 movable-view 组件进行拖动操作,可以通过设置不同的属…...
隔离上网,安全上网
SDC沙盒数据防泄密系统(安全上网,隔离上网) •深信达SDC沙盒数据防泄密系统,是专门针对敏感数据进行防泄密保护的系统,根据隔离上网和安全上网的原则实现数据的代码级保护,不会影响工作效率,不…...
NOSQL Redis 数据持久化 RDB、AOF(二) 恢复
redis 执行flushall 或 flushdb 也会产生dump.rdb文件,但里面是空的。 注意:千万执行,不然rdb文件会被覆盖的。 dump.rdb 文件如何恢复数据 讲备份文件 dump.rdb 移动到redis安装目录并启动服务即可。 dump.rdb 自动触发 和手动触发 自…...
UDP通信
UDP通信 #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen); - 参数:- sockfd : 通信的fd- buf : 要发送的数据- len : 发送…...
Bootstrap对溢出内容的两种处理:滚动条和隐藏两种方式
Bootstrap中定义了以下两个类来处理内容溢出的情况: 类overflow-auto:在固定宽度和高度的元素上,如果内容溢出了元素,将生成一个垂直滚动条,通过滚动条可以查看溢出的内容。 类overflow-hidden:在固定宽度和高度的元素…...
elasticsearch基本语法
这里写自定义目录标题 elasticsearch简介基本语法索引创建索引修改索引删除索引 查询简单查询精确查询条件查询范围查询:聚合查询:排序和分页: 参考文献: elasticsearch简介 Elasticsearch 是一个开源的分布式搜索和分析引擎&…...
Maven Spring jar包启动报错 排查
Maven Spring jar包启动报错排查 背景 maven 编译jar包,放在linux服务器启动不起来,提示:xxxx-0.0.1-SNAPSHOT.jar中没有主清单属性 原因 pom 配置文件,多了 <skip>true</skip> <build><plugins>&l…...
LeetCode-2485-找出中枢整数
题目描述: 给你一个正整数 n ,找出满足下述条件的 中枢整数 x : 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中…...
nano pi m1配置脚本(全志H3)
为nanopi m1写一个自动配置脚本,简化自己的操作 配置:H3芯片,1G内存,64G卡 系统:friendlycore focal 4.14版本 一、系统安装 烧录系统后,插入机器,但是使用df -ih发现只有900K的nodesÿ…...
linux--gdb的使用
1,Makefile默认release版本,要想进入debug版本需添加-g后缀 2,进入调试界面:gdb 可执行程序 3,显示代码:l(list) 数字(1/0) 不停回车可一直显示到结束并显…...
JVM命令行监控工具
JVM命令行监控工具 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。 Java作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注,可能…...
系统架构设计:4 论微服务架构及其应用
目录 一 微服务架构 1 微服务 2 微服务架构的优点 3微服务面临的挑战...
JetBrains IDE试用期重置终极指南:专业开发者必备的30天循环解决方案
JetBrains IDE试用期重置终极指南:专业开发者必备的30天循环解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在当今软件开发领域,JetBrains系列IDE凭借其卓越的代码智能提示、强大…...
内网手机远程桌面:解锁高效协同的数字密钥
在数字化办公与生活深度融合的当下,人们对于信息获取与设备操控的便捷性需求持续攀升。当我们身处内网环境,却渴望随时随地操控远端的电脑设备,内网手机远程桌面技术便如同一把精准的数字密钥,打破空间与网络的束缚,为…...
【信息科学与工程学】【物理/化学科学和工程技术】知识体系 第四十一篇 数据中心基础设施领域中的力学知识 01
编号:001 类别 结构力学 (静力学与动力学) 领域 计算基础设施 / 机房设施 力学模型配方 将服务器机架简化为一个底部固定、顶部自由的悬臂梁模型。在地震激励下,该模型转化为一个单自由度阻尼受迫振动系统。主要考虑水平方向的地震力作用。 数学分析 通过建立运动微分…...
ROS2进阶实践 -- 从零构建模块化差速机器人模型 -- 掌握xacro宏定义与参数化设计
1. 为什么需要xacro宏定义与参数化设计 当你第一次用URDF给机器人建模时,可能会觉得这种XML格式的描述方式很直观。但随着模型复杂度提升,问题就来了——我最近给一个差速机器人添加传感器时,发现URDF文件膨胀到了500多行,其中光是…...
3篇6章5节:基于 stat_slab () 函数的高血压临床数据可视化
在现代医学研究,传统 “均值 标准差”“箱线图” 等统计表达,往往会丢失数据的分布形态、双峰特征、组间重叠等关键信息,无法适配真实世界临床数据的复杂特征。而 R 语言 ggdist 包的 stat_slab() 函数,作为分布可视化体系的核心底层工具,不仅能实现样本数据的完整分布呈…...
告别龟速传输:在AutoDL上利用AutoPanel高效迁移大容量数据集的实战技巧
1. 为什么大容量数据集传输总是慢如蜗牛? 每次在AutoDL上处理大容量数据集时,最让人抓狂的就是漫长的传输等待。我清楚地记得第一次尝试上传15GB图像数据集时的绝望——整整6个小时的等待,期间还因为网络波动失败了两次。后来才发现ÿ…...
PySOT单目标跟踪实战:从零搭建环境到模型部署的避坑指南(手把手教学,附代码)
1. 环境准备:从零搭建PySOT开发环境 第一次接触PySOT时,我花了整整两天时间折腾环境配置,踩遍了所有能踩的坑。为了让你们少走弯路,我把这些经验整理成可复现的步骤。首先需要明确的是,PySOT对系统环境有特定要求&…...
气候模型结果难解读?NotebookLM因果推理模块深度拆解(附GFDL-ESM4输出可复现分析链)
更多请点击: https://kaifayun.com 第一章:NotebookLM气候研究辅助 NotebookLM 是 Google 推出的基于 AI 的研究协作者,专为处理长文档、技术报告与多源数据而设计。在气候科学研究中,它可快速解析 IPCC 报告、CMIP6 模型输出摘要…...
3分钟快速上手:Windows实时语音转文字工具TMSpeech完整使用指南
3分钟快速上手:Windows实时语音转文字工具TMSpeech完整使用指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱吗?是否曾因错过重要信息而懊恼?今天我要向…...
虚幻引擎网络协议逆向分析:从抓包到安全加固的工程实践
1. 项目概述与核心价值最近在游戏开发圈里,特别是那些深耕UE(Unreal Engine,虚幻引擎)网络同步和反外挂的同行们,可能都听说过或者正在研究一个叫venetianglassmaking858/UnrealClientProtocol的项目。这个名字听起来有…...
