java重点学习-线程池的使用和项目案例

news/2024/9/18 16:09:51/ 标签: java

十一 线程池的使用场景

你们项目哪里用到了多线程

  • 批量导入:使用了线程池+CountDownLatch批量把数据库中的数据导入到了ES(任意)中,避免OOM
  • 数据汇总:调用多个接口来汇总数据,如果所有接口(或部分接口)的没有依赖关系,就可以使用线程池+future来提升性能
  • 异步线程(线程池):为了避免下一级方法影响上一级方法(性能考虑),可使用异步线程调用下一个方法(不需要下一级方法返回值),可以提升方法响应时间

11.1 批量导入CountDownLatch

模拟案例1:

变成0在运行await之后的代码

真实案例:

es索引库

线程池:

逻辑代码

11.2 多线程使用场景二(数据汇总) Future

在一个电商网站中,用户下单之后,需要查询数据,数据包含了三部分:订单信息、包含的商品、物流信息;这三块信息都在不同的微服务中进行实现的,我们如何完成这个业务呢?

二。 future 获取结果(结果的返回值Map和定义的Map类型保持一致),get拿到方法,并行化汇总

11.3 异步线程调用 @Async

(保存搜索框的历史记录不能影响搜索功能,开一个线程执行,关键使用@Async(线程池))

关键字keyword 搜索文章数据

es索引库 app_info_article

关键字不为空,则执行insert方法保存搜索历史(关键方法)

@EnableAsync 开启异步调用,使@Async生效

表名异步调用方法 insert 中的@Async(线程池)

11.4 如何控制某个方法允许并发访问线程的数量 Semaphore

Semaphore['sema for]信号量,是JUC包下的一个工具类,底层是AQS,我们可以通过其限制执行的线程数量使用场景:

通常用于那些资源有明确访问数量限制的场景,常用于限流

在多线程中提供了一个工具类Semaphore,信号量。在并发的情况下,可以控制方法的访问量

  • 1.创建Semaphore对象,可以给一个容量1.
  • 2. acquire()可以请求一个信号量,这时候的信号量个数-1
  • release()释放一个信号量,此时信号量个数+1

11.5 解决线程安全ThreadLocal

概述

ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享

案例:使用JDBC操作数据库时,会将每一个线程的Connection放入各自的ThreadLocal中,从而保证每个线程都在各自的 Connection 上进行数据库的操作,避免A线程关闭了B线程的连接。

原理

内存泄漏问题:

Java对象中的四种引用类型:强引用、软引用、弱引用、虚引用

强引用:最为普通的引用方式,表示一个对象处于有用且必须的状态,如果一个对象具有强引用,则GC并不会回收它。即便堆中内存不足了,宁可出现OOM,也不会对其进行回收

User user = new User();

弱引用:一旦发现弱引用,就会回收到弱引用:表示一个对象处于可能有用且非必须的状态。在GC线程扫描内存区域时,相关联的对象。对于弱引用的回收,无关内存区域是否足够,一旦发现则会被回收

User user = new User();

WeakReference weakReference = new WeakReference(user)


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

相关文章

基于APISIX实现API网关案例分享

一、APISIX介绍 1、定义 Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX + ngx_lua 的技术基础之上,充分利用了 LuaJIT 所提供的强大性能。 2、软件架构 2.1、架构图 APISIX 主要分为两个部分: APISIX 核心:包括 Lua 插件、多语言插件运行时…

Opencv实现提取卡号(数字识别)

直接开始 实行方法 解析命令行参数:使用argparse库来解析命令行输入,确保用户提供了输入图像和模板图像的路径。 读取模板图像:使用cv2.imread()函数读取模板图像的路径,并显示原始图像。 图像预处理: 将图像转换为…

Java面试篇基础部分-Java中的集合类

Java集合是面试中经常被问到的一块内容,很多人在这个地方被面试官吊打。Java集合类被定义在java.util包中,主要有四种集合,分别是List、Queue、Set和Map,每种集合分类如下图所示 List集合 List是一种在开发中比较常用的集合类,作为有序的Collection的典范,分别有如下的…

ubuntu20.4安装Qt5.15.2

ubantu20.4镜像下载地址: https://releases.ubuntu.com/focal/ubuntu-20.04.6-desktop-amd64.iso Qt5.15.2下载地址: https://download.qt.io/official_releases/online_installers/ 安装步骤 1、进入地址后选择对应安装包,我这是ubuntu…

redis基本数据结构-string

文章目录 1. redis的string数据结构2. 常见的业务场景2.1 缓存功能案例讲解背景优势解决方案代码实现 2.2 计数器案例讲解背景优势解决方案代码实现 2.3 分布式锁案例讲解背景优势解决方案代码实现 2.4 限流案例讲解背景优势解决方案代码实现 2.5 共享session案例讲解背景优势解…

HarmonyOS开发之路由跳转

文章目录 一、路由跳转模式与实例1.router.pushUrl2.router.replaceUrl3.router.back 一、路由跳转模式与实例 跳转模式 有点类似于vue的路由跳转 router.pushUrl 保留路由栈,保留当前的页面;router.replaceUrl 销毁当前页面,跳转一个新的页…

Go语言现代web开发08 if和switch分支语句

if语句 If is the most common conditional statement in programming languages. If the result of the condition caculation is positive(true), the code inside if statement will be executed. In the next example, value a will be incremented if it is less than 10…

opencv学习:信用卡卡号识别

该代码用于从信用卡图像中自动识别和提取数字信息。该系统将识别信用卡类型,并输出信用卡上的数字序列。 1.创建命令行参数 数字模板 信用卡 # 创建命令行参数解析器 ap argparse.ArgumentParser() # 添加命令行参数 -i/--image,指定输入图像路径 ap.…

饿了么基于Flink+Paimon+StarRocks的实时湖仓探索

摘要:本文整理自饿了么大数据架构师、Apache Flink Contributor 王沛斌老师在8月3日 Streaming Lakehouse Meetup Online(Paimon x StarRocks,共话实时湖仓架构)上的分享。主要分为以下三个内容: 饿了么实时数仓演进之…

python-游戏自动化(一)(实战-自动刷视频点赞)

前提准备 什么是游戏自动化? 游戏自动化是指通过对游戏的界面结构的解析或界面图像的处理与识别,再模拟人工对软件进行的各种操作,从而实现自动化,达到解放双手,节约时间,提高效率的目标。 在本教程中&am…

房产销售系统开发:SpringBoot技术要点

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的…

RDMA应用场景及效果

GPU Direct 参考:网络架构如何支持超万卡的大规模 AI 训练?| AICon_芯片与网络_InfoQ精选文章 GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联,例如 NVIDIA 的 A100 或 H800,它们内部的 NVLink 互联可以达到 6…

【网络安全】空字节绕过:URL回调+XSS+SQL绕WAF

未经许可,不得转载。 文章目录 空字节URL回调XSSSQL空字节 \0,也称为null字节,是一个值为零的特殊字符。在编程中,通常用来表示字符串的结束。攻击者可以利用null字节注入来绕过一些验证或过滤机制。 以下三个漏洞,空字节功不可没。 URL回调 密码重置功能,发起请求后…

如何找到UI5 Tooling-UI5命令

文章目录 UI5 Tooling第一步:首先找找到UI5 的官网如下:第二步:找到get started, 学习UI5 Demo第三步:开发环境--搭建安装UI5 命令行界面Global installation to have the command availableAdditional local install …

学习平台|基于java的移动学习平台系统小程序(源码+数据库+文档)

学习平台|学习平台系统|在线学习平台系统小程序 目录 基于java的移动学习平台系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码…

基于大数据的科研热点分析与挖掘系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 科研活动的快速发展产生了大量的学术文献,如何从这些文献中提炼出有价值的科研热点和趋势成为了一个重要的问题。本项目旨在开发一个基于大数据的科研热点分析可视化系统,采…

综合型医院适合什么样的数据摆渡方式,才能服务与安全兼顾?

综合型医院,是提供全面医疗服务的综合型医院。综合型医院的服务对象广泛,包括儿童、成人、老年人等各年龄段的人群,以及患有各种疾病的患者。它们通过提供全面的医疗服务,保障人民群众的健康需求,是医疗卫生事业的重要…

ComfyUI安装节点过程中被降低了版本的软件包重新安装

最近在安装2个没怎么及时更新节点时,安装节点依赖性过程中,将原高版本的软件包,给降到了低版本,解决的办法就是:1、再次删除软件包,2、指定版本号重新安装回高版本软件包。

maven父子工程多模块如何管理统一的版本号?

1.为什么要统一管理? maven父子工程多模块,每个模块还都可以独立存在,子模块往往通常希望和父工程保持一样的版本,如果每个工程单独定义版本号,后期变更打包也非常麻烦,如何维护一个全局的版本号呢&#x…

【运维】自动化运维工具,使用 Ansible 进行开发环境配置管理(本地/远程,brew/scoop/yum,docker/packer/openstack)

【运维】自动化运维工具,使用 Ansible 进行开发环境配置管理(本地/远程,brew/scoop/yum,docker/packer/openstack) 文章目录 1、什么是 Ansible,如何安装2、使用 ansible 自动配置本地开发环境(…