当前位置: 首页 > news >正文

工作中几个问题的思考

对于需要并行多公司并行处理的任务,方案是什么?

多线程、并行流、并发库(ExecutorService、Futrue、Callable),分布式计算

(1)按照公司ID分片
(2)按照业务类型分片

处理某类任务,多个线程同时处理,拿到最先处理的完成接口

(1) 采用 CompletableFuture.anyOf(future1, future2, future3), 注意CompletableFuture使用自定义线程池,默认是ForkJoinPool线程池;案例

public class CompletableFutrueAnyOf {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(3);CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {throw new RuntimeException(e);}return "futrue1 执行结果";},executorService);CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {try {TimeUnit.SECONDS.sleep(6);} catch (InterruptedException e) {throw new RuntimeException(e);}return "futrue2 执行结果";},executorService);CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {throw new RuntimeException(e);}return "futrue3 执行结果";},executorService);CompletableFuture<Object> objectCompletableFuture = CompletableFuture.anyOf(future1, future2, future3);try {System.out.println(objectCompletableFuture.get());} catch (InterruptedException e) {throw new RuntimeException(e);} catch (ExecutionException e) {throw new RuntimeException(e);}}
}

(2) Executor框架和Future接口实现
如果同时处理多个任务,只需要提交多个任务到线程池中即可。第一个完成的任务的结果会被get()方法返回

在并发查询某一类数据时,流量会全部打到存储,怎么优化该场景

(1)mybatis缓存,此方案只针对使用mybatis当作ORM框架,一级缓存是SqlSession级别的缓存
二级缓存:跨SqlSession级别,通常用于单表、多表会有脏数据
(2)缓存工具,比如redis,针对相同时间内的,相同查询条件,可以直接从结果返回数据;但是也有局限性:(比如分页),或者定时缓存到redis、后续直接从redis查,类似于热点数据缓存
(3)重复请求场景:前端限流,后端限流
(4)数据库层级的优化:索引、分片、查询语句优化、水平/垂直扩展等

Java ThreadPoolExecutor配置时,需要配置corePoolSize,maximumPoolSize、queueCapacity、以及拒绝策略,请描述随着线程池提交任务的增加,线程池创建线程的策略;

execute 执行原理

在这里插入图片描述
(1)提交任务后会首先进行当前工作线程数与核心线程数的比较,如果当前工作线程数小于核心线程数,则直接调用 addWorker() 方法创建一个核心线程去执行任务;
(2)如果工作线程数大于核心线程数,即线程池核心线程数已满,则新任务会被添加到阻塞队列中等待执行,当然,添加队列之前也会进行队列是否为空的判断;
(3)如果线程池里面存活的线程数已经等于核心线程数了,且阻塞队列已经满了,再会去判断当前线程数是否已经达到最大线程数 maximumPoolSize,如果没有达到,则会调用 addWorker() 方法创建一个非核心线程去执行任务;
(4)如果当前线程的数量已经达到了最大线程数时,当有新的任务提交过来时,会执行拒绝策略
整个顺序就是:优先核心线程、阻塞队列次之,最后非核心线程。

addWorker方法

可以看到execute中最关键的就是addWorker方法,它接受两个参数:
第一个参数是要执行的任务,如果为null那么会从等待队列中拉取任务;
第二个参数是表示是否核心线程,用来控制addWorker方法流程的;

在这里插入图片描述

线程池调用execute提交任务—>创建Worker(设置属性thead、firstTask)—>worker.thread.start()—>实际上调用的是worker.run()—>线程池的runWorker(worker)—>worker.firstTask.run();

相关文章:

工作中几个问题的思考

对于需要并行多公司并行处理的任务&#xff0c;方案是什么&#xff1f; 多线程、并行流、并发库&#xff08;ExecutorService、Futrue、Callable&#xff09;&#xff0c;分布式计算&#xff08;1&#xff09;按照公司ID分片 &#xff08;2&#xff09;按照业务类型分片 处理…...

Jmeter的性能测试

性能测试的概念 定义&#xff1a;软件的性能是软件的一种非功能特性&#xff0c;它关注的不是软件是否能够完成特定的功能&#xff0c;而是在完成该功能时展示出来的及时性。 由定义可知性能关注的是软件的非功能特性&#xff0c;所以一般来说性能测试介入的时机是在功能测试…...

IntelliJ IDEA 2020.2.1白票安装使用方法

先安装好idear Plugins 内手动添加第三方插件仓库地址&#xff1a;https://plugins.zhile.io 搜索&#xff1a;IDE Eval Reset插件进行安装 输入https://plugins.zhile.io 手动安装离线插件方法 安装包可以去笔者的CSDN资源库下载 安装mybaties插件...

【UCAS自然语言处理作业一】利用BeautifulSoup爬取中英文数据,计算熵,验证齐夫定律

文章目录 前言中文数据爬取爬取界面爬取代码 数据清洗数据分析实验结果 英文数据爬取爬取界面动态爬取 数据清洗数据分析实验结果 结论 前言 本文分别针对中文&#xff0c;英文语料进行爬虫&#xff0c;并在两种语言上计算其对应的熵&#xff0c;验证齐夫定律github: ShiyuNee…...

微信小程序之个人中心授权登录

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.了解微信授权登录 微信登录官网&#xff1a; 小程序登录https://developers.weixin.qq.com/miniprogram/d…...

Elasticsearch的聚集统计,可以进行各种统计分析

说明&#xff1a; Elasticsearch不仅是一个大数据搜索引擎&#xff0c;也是一个大数据分析引擎。它的聚集(aggregation)统计的REST端点可用于实现与统计分析有关的功能。Elasticsearch提供的聚集分为三大类。 度量聚集(Metric aggregation)&#xff1a;度量聚集可以用于计算搜…...

Webpack 理解 input output 概念

一、介绍 如果还没用过 Webpack 请先阅读 Webpack & 基础入门 再回头看本文。 Webpack 的核心只做两件事&#xff0c;输入管理&#xff08;Input Management&#xff09;和输出管理&#xff08;Output Management&#xff09;&#xff0c;什么花里胡哨的插件和配置都离不…...

【字符函数】

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 &#x1f388;相关博文&#xff1a;字符串函数&#xff08;一&#xff09;、字符串函数&#xff08;二&#xff09; 字符函数 字符函数1.字符分类函数1.1 iscntrl - 判断是否是控制字符1.2 i…...

git创建与合并分支

文章目录 创建与合并分支分支管理的概念实际操作 解决冲突分支管理策略Bug分支Feature分支多人协作 创建与合并分支 分支管理的概念 分支在实际中有什么用呢&#xff1f;假设你准备开发一个新功能&#xff0c;但是需要两周才能完成&#xff0c;第一周你写了50%的代码&#xf…...

【电子通识】USB TYPE-A 2.0/3.0连接器接口

基础知识 USB TYPE-A连接器又可称为USB-A&#xff0c;现在不少PC、PC周边、手机充电器等等都依然采用了这种扁平的矩形接口&#xff0c;是目前普及度最高的USB接口了。 USB-A亦有分为插头与插座。常见的USB-A数据线的A端就是插头&#xff0c;而充电器上的则是插座。插头和插座…...

org.apache.sshd的SshClient客户端 连接服务器执行命令 示例

引入依赖 <dependency><groupId>org.apache.sshd</groupId><artifactId>sshd-core</artifactId><version>2.9.1</version></dependency>示例代码&#xff0c;可以直接执行&#xff0c;也可以做替换命令、维护session等修改 p…...

STM32 裸机编程 03

MCU 启动和向量表 当 STM32F429 MCU 启动时&#xff0c;它会从 flash 存储区最前面的位置读取一个叫作“向量表”的东西。“向量表”的概念所有 ARM MCU 都通用&#xff0c;它是一个包含 32 位中断处理程序地址的数组。对于所有 ARM MCU&#xff0c;向量表前 16 个地址由 ARM …...

Python ‘list‘ object is not callable错误

我尝试着解决“TypeError: ‘list’ object is not callable”这个错误。在Python编程中&#xff0c;我有时会遇到这个错误。这个错误通常是由于我错误地尝试像函数一样调用一个列表对象。为了解决这个问题&#xff0c;我需要找出错误发生的具体位置&#xff0c;然后进行修正。…...

原生php 实现redis登录五次被禁,隔天再登陆

<?php /*** Created by PhpStorm.* User: finejade* Date: 2023-10-18* Time: 11:08*/ session_start();include_once(header.php); include_once(connect.php); include_once(common.php); include_once(redis.php); try {// 常量 用户错误次数记录define("USER_LOGI…...

24. Kernel 4.19环境下,Cilium网络仍然需要使用iptables

在设计这套容器集群服务时,我从原来的k3s架构中分离出一个问题,那就是容器网络插件应该选择哪个。因为我设计的目标是给服务器领域使用的容器引擎,所以我就不需要考虑太多边缘IOT设备的情况,直接拉满技能找了cilium。cilium借助内核ebpf技术的出现,让我看到了网络性能更好…...

java中的容器(集合),HashMap底层原理,ArrayList、LinkedList、Vector区别,hashMap加载因子0.75原因

一、java中的容器 集合主要分为Collection和Map两大接口&#xff1b;Collection集合的子接口有List、Set&#xff1b;List集合的实现类有ArrayList底层是数组、LinkedList底层是双向非循环列表、Vector&#xff1b;Set集合的实现类有HashSet、TreeSet&#xff1b;Map集合的实现…...

Linux Server 终止后立即重启报错 bind error: Address already in use

先启动Server&#xff0c;再启动Client&#xff0c;然后使用CtrlC关闭Server&#xff0c;马上再运行Server&#xff0c;会得到以下结果&#xff1a; bind error: Address already in use这是因为&#xff0c;虽然Server的应用程序终止了&#xff0c;但TCP协议层的连接并没有完全…...

【Python 千题 —— 基础篇】分解数据

题目描述 题目描述 编写一个程序&#xff0c;输入一个类似 “233,234,235” 格式的字符串&#xff0c;然后提取字符串中的数字&#xff0c;将这些数字存储在列表中&#xff0c;并输出该列表。在这里&#xff0c;我们使用 eval 函数来解析字符串中的数字。 输入描述 输入一个…...

【C++】C++11新特性之右值引用与移动语义

文章目录 一、左值与左值引用二、右值与右值引用三、 左值引用与右值引用比较四、右值引用使用场景和意义1.左值引用的短板2.移动构造和移动赋值3.STL中右值引用的使用 五、万能引用与完美转发1.万能引用2.完美转发 一、左值与左值引用 在C11之前&#xff0c;我们把数据分为常…...

家庭燃气表微信抄表识别系统

1.背景需求 目前家里燃气度数的读数上报&#xff0c;每个月在社区微信群里面将手机拍摄的燃气表读数截图&#xff08;加住址信息水印&#xff09;&#xff0c;发到群里给抄表员。 2.总体设计 设计目标 功能一&#xff1a;手机上随时可以远程采集读数图片&#xff08;自动加住…...

GLM-OCR真实体验:上传图片秒级识别,支持中英文混合文本提取

GLM-OCR真实体验&#xff1a;上传图片秒级识别&#xff0c;支持中英文混合文本提取 1. 为什么选择GLM-OCR&#xff1f; 在日常工作和生活中&#xff0c;我们经常会遇到需要从图片中提取文字的场景。无论是扫描的文档、手机拍摄的笔记&#xff0c;还是网页截图&#xff0c;传统…...

具身智能表征的ImageNet来了!机器人终于看懂了人类世界

机器人在现实中总“翻车”&#xff1f;只因跨不过那道模态鸿沟。今天&#xff0c;具身智能真正的 ImageNet 时刻终于到来。从 2025 年春晚的《秧 BOT》&#xff0c;到 2026 年春晚里走进武术、小品等不同节目&#xff0c;机器人已经不只是舞台上的技术点缀&#xff0c;它们的动…...

2025最权威的十大降重复率工具推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 为切实有效地把文本的AIGC检测可能性降低下来&#xff0c;能够按照下面这些维度开展技术性的…...

NVIDIA Jetson AGX Orin上OpenPCDet环境搭建避坑指南:从CUDA配置到PointRCNN运行

NVIDIA Jetson AGX Orin上OpenPCDet环境搭建全流程实战&#xff1a;从CUDA配置到PointRCNN部署 在边缘计算设备上部署3D目标检测模型正成为自动驾驶和机器人导航领域的关键需求。NVIDIA Jetson AGX Orin凭借其强大的AI算力和能效比&#xff0c;成为这类场景的理想选择。本文将带…...

一站式解锁:Firmware Extractor如何让你轻松掌握Android固件提取技术

一站式解锁&#xff1a;Firmware Extractor如何让你轻松掌握Android固件提取技术 【免费下载链接】Firmware_extractor Extract given archive to images 项目地址: https://gitcode.com/gh_mirrors/fi/Firmware_extractor 你是否曾面对五花八门的Android固件文件感到束…...

时序抖动:概念、测量与系统设计优化

1. 时序抖动的基础概念与影响机制在数字系统设计中&#xff0c;时序抖动&#xff08;Jitter&#xff09;是指时钟信号边沿相对于理想位置的偏差。这种看似微小的偏差会对系统性能产生深远影响&#xff0c;特别是在高速数据传输和精密信号处理领域。想象一下交响乐团的指挥手势出…...

python commitizen

# 关于Python Commitizen&#xff0c;你可能需要知道这些 在团队协作开发中&#xff0c;代码提交信息的质量常常被忽视&#xff0c;却直接影响项目的可维护性。杂乱无章的提交信息就像没有标签的档案柜&#xff0c;时间一长&#xff0c;谁都说不清某个改动究竟为何发生。Python…...

免费在线UML绘图神器:3分钟学会用代码生成专业图表

免费在线UML绘图神器&#xff1a;3分钟学会用代码生成专业图表 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为复杂的UML绘图工具而头疼吗&#xff1f;PlantUML Editor是一款革命性…...

端到端 RAG 实战:用 LangChain 搭建 PDF 问答系统

一、今天要做什么 前 6 天我们逐一学习了 RAG 的每个核心组件&#xff1a; Day01&#xff1a;RAG 整体架构Day02&#xff1a;文本分块&#xff08;Chunking&#xff09;Day03&#xff1a;Embedding 模型Day04&#xff1a;向量数据库Day05&#xff1a;检索策略Day06&#xff1…...

避坑指南:STM32F407 ADC采集波形送到VOFA+显示,这些细节不注意波形会失真

STM32F407 ADC数据采集与VOFA波形显示优化实战 最近在调试STM32F407的ADC采集时&#xff0c;发现VOFA上显示的波形总是出现各种小问题——正弦波有毛刺、三角波出现阶梯状畸变、方波边缘抖动。这让我意识到&#xff0c;从ADC采样到上位机显示这条数据链路上&#xff0c;每个环节…...