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.rhkb.cn/news/423737.html

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

相关文章

Fiddler下载安装及汉化

直接上干货 1.下载地址: 通过百度网盘分享的文件:fiddler汉化,FiddlerSetup抓包.exe等2个文件 链接:https://pan.baidu.com/s/12JBZO8z0mDHlHM1DCL365g 提取码:1111 2.fiddler安装: 注意安装位置 3.汉化&…

个性化、持续性阅读 学生英语词汇量自然超越标准

2024年秋季新学年,根据2022版《义务教育英语课程标准》全新修订的英语新版教材开始投入使用,标志着我国英语教育迈入了一个以应用为导向、注重综合素养培养的新阶段。 新版教材的变革不仅仅是一次词汇量的简单增加,更是一场从应试到应用的深…

[数据集][目标检测]河道垃圾检测数据集VOC+YOLO格式2274张8类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2274 标注数量(xml文件个数):2274 标注数量(txt文件个数):2274 标注…

使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误

目录 效果图 解决方案 修正要点 效果图 修改前App.vue代码&#xff1a; <template><div id"app"><canvas id"myChart"></canvas></div> </template><script> import axios from axios; import { Chart, regis…

QT多线程编程(基础概念以及示例)

QT多线程编程 前言&#xff1a;基础夯实&#xff1a;一:多线程概述二:QT多线程的使用1. 继承QThread类2. 继承QObject类3. QtConcurrent模块 三:线程同步与通信四:线程安全五:线程管理六:总结 效果展示&#xff1a;实现功能&#xff1a;核心代码&#xff1a;mainwindow.hmythre…

k8s 部署 ruoyi 前后端分离项目

本文视频版: https://www.bilibili.com/video/BV17ugkePEeN 参考 https://blog.csdn.net/qq_50247813/article/details/136934090 https://gitee.com/nasaa/RuoYi-Vue-cloud https://www.itsgeekhead.com/tuts/kubernetes-129-ubuntu-22-04-3/ https://kubernetes.io/docs…

【信号】SIGCHLD信号--了解

SIGCHLD是多少号信号呢&#xff1f;17号 我们知道用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作…

Leetcode 二叉树中根遍历

采用递归算法&#xff0c;并且用一个向量来存储节点值。 算法C代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}*…

Python库Plotly学习笔记

Plotly是一个用于创建交互式图形的Python库。它提供了丰富的图表类型&#xff0c;包括散点图、线图、柱状图、热力图、饼图等&#xff0c;以及高级的可视化功能&#xff0c;如动画、交互、数据缩放和拖动等。 Plotly库的主要特点&#xff1a; 交互式图表&#xff1a;Plotly创…

git 更新LingDongGui问题解决

今天重新更新灵动gui的代码&#xff0c;以便使用最新的arm-2d&#xff0c;本来以为是比较简单的一件事情&#xff08;因为以前已经更新过一次&#xff09;&#xff0c;却搞了大半天&#xff0c;折腾不易啊&#xff0c;简单记录下来&#xff0c;有同样遇到问题的同学参考&#x…

SSM框架学习(三、MyBatis实践:提高持久层数据处理效率)

目录 一、Mybatis简介 1.简介 2.持久层框架对比 3.快速入门&#xff08;基于Mybatis3方式&#xff09; 4.ibatis方式的实现和原理 5.ibatis与mybatis之间的关系 二、Mybatis基本使用 1.向 sql 语句传参 &#xff08;1&#xff09;mybatis日志输出配置 &#xff08;2&…

存储课程学习笔记5_iouring的练习(io_uring,rust_echo_bench,fio)

我们知道&#xff0c;在处理大量高并发网络时&#xff0c;一般考虑并发&#xff0c;以及设计对应的方案&#xff08;比如select,poll,epoll&#xff09;等。 那么如果频繁进行文件或者磁盘的操作&#xff0c;如何考虑性能和并发&#xff0c;这里就可以考虑用到io_uring。 0&a…

RK3588镜像打包制作,替换文件系统

1.在开发板上安装async apt-get async 2.在另一台linux机器上执行命令拷贝文件系统 注意&#xff1a; 这里使用root权限或者账户 mkdir rootfs rsync -avx root192.168.1.3:/ rootfs 3.制作空镜像文件 先去开发板上验证自己的系统使用了多少空间&#xff0c;然后输入命令制…

rancker 图形化界面

rancker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控————普罗米修斯 #在master和两个node上都操作 [rootmaster01 opt]# rz -E rz waiting to receive. [rootmaster01 opt]# docker load -i rancher.tar ​ #在master上操作 [rootmaster01 opt]# docker pul…

828华为云征文|华为云Flexus X搭建借贷管理系统、二次开发借贷小程序 前端源码uniapp

在华为云828 B2B企业节的盛宴中&#xff0c;Flexus X实例以其卓越的算力性能和灵活的资源配置脱颖而出。对于追求极致性能、渴望在借贷管理、电商交易等场景中脱颖而出的您来说&#xff0c;Flexus X无疑是最佳拍档。搭载创新加速引擎&#xff0c;让您的自建MySQL、Redis、Nginx…

浙大数据结构:04-树6 Complete Binary Search Tree

这道题利用了完全二叉树的性质&#xff0c;我也参考了一些代码写的。 &#xff08;自己一开始写了别的方法&#xff0c;但一直过不了最后一个测试点&#xff0c;红温了&#xff09; 机翻&#xff1a; 1、条件准备 用vector存输入的数据&#xff0c;另一个数组存输出的结果&a…

实战外网配置——光猫桥接+路由器PPPoE拨号+防火墙外网链路健康检查+外网流量负载均衡

一、适用场景&#xff1a; 1、企业规模较大时&#xff0c;1条公网带宽流量可能不足&#xff0c;需要用到多条公网出口时。 2、企业有业务需要静态ip映射&#xff0c;但是因静态ip专线价格较高&#xff0c;所以需要拨号光纤承载较多的下行流量。 3、当公网出口有多条链路&#…

学习笔记 - 知识图谱的符号表示方法

学习笔记 - 知识图谱的符号表示方法 说明&#xff1a; 首次发表日期&#xff1a;2024-09-13个人阅读学习并摘录成笔记 知识表示的相关名词定义 以下内容摘录自 Knowledge Graphs Applied 2.3小节&#xff0c;然后AI翻译人工润色。 实体&#xff08;Entities&#xff09;—表…

Python | 练习作业 2

为学生登录系统新增搜索功能。 第二天作业的解题思路&#xff1a; # 1.创建一个空列表保存搜索结果 # 2.让用户输入要搜索的内容 # 3.遍历学生信息&#xff0c;检查学生的id name age gender score # 中的属性值 是否跟用户搜索的内容一致 # 4.如果有一致的属性 那么就将该学生…

TikTok运营需要的独立IP如何获取?

TikTok作为当下炙手可热的社交媒体平台&#xff0c;吸引了众多个人创作者和企业进驻。在进行TikTok运营时&#xff0c;许多经验丰富的用户都倾向于选择独立IP。那么&#xff0c;TikTok运营为什么需要独立IP&#xff1f;又该如何获取呢&#xff1f;本文将详细为您解答这些问题。…