java模拟数据库压测_写并发压测 java 脚本你必须会的 3 个类
性能测试做到后面,一些特殊的场景利用常用的现成工具满足不了需求,所以你需要学习java写一些特定协议的压测脚本,那你不得不研究多线程或线程池,而此时你也一定会遇到java并发编程中的几个类,今天重点讲解这3个类,CountDownLanch、CyclicBarrier、Semaphore,希望大家以后看到的时候知道是干嘛用的。
接下来,我就最近学习的成果,下面和大家举例子讲解一下,帮助理解。当然篇幅原因,完整的java代码例子
1、CountDownLanch
场景
工作中往往会遇到需要异步处理的任务,此时我们就会利用多线程的方式去处理,即启动子线程去执行任务,而此时主线程阻塞,等待所有的子线程完成任务后,再去做一些汇总统计工作。
CountDownLanch 是一个倒数计数器, 给一个初始值(>=0), 然后每一次调用countDown就会减1, 这很符合等待多个子线程结束的场景: 一个线程结束的时候, countDown一次, 直到所有的线程都countDown了 , 那么所有子线程就都结束了。
先看看CountDownLanch提供的方法。
await: 会阻塞等待计数器减少到0位置. 带参数的await是多了等待时间。
countDown: 将当前的计数减1。
getCount(): 返回当前的计数。
显而易见, 我们只需要在子线程执行之前, 赋予初始化countDownLanch, 并赋予线程数量为初始值。
每个线程执行完毕的时候, 就countDown一下。主线程只需要调用await方法, 可以等待所有子线程执行结束。
2、CyclicBarrier
场景
我们在做压测的时候,如要真正的并发,那么在创建线程成功后需要等待其他线程也创建好了,一起等着,同时发送请求,此时就用到了CyclicBarrier。
CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
3、Semaphore
场景
有时候并发太大的时候,我们需要人工的控制,譬如一些数据库的连接数这样子的,资源毕竟有限的,不可能无限去创建连接,此时我们就需要利用Semaphore去控制。
Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。可以控制系统的流量,拿到信号量的线程可以进入,否则就等待。通过acquire()和release()获取和释放访问许可。
更多性能测试相关学习可以关注公众号大话性能。
java模拟数据库压测_写并发压测 java 脚本你必须会的 3 个类相关推荐
- java模拟atm 课程设计_急求,关于Java课程设计ATM创建实现
展开全部 我现写的: import java.util.Scanner;public class ATM { private static String theName = "admin&q ...
- java锁的有哪些_「并发编程」Java锁分类和特点有哪些
公平锁.非公平锁:公平锁指多个线程按照申请锁的顺序来获取锁,非公平锁就是没有顺序完全随机,所以能会造成优先级反转或者饥饿现象:synchronized 就是非公平锁,ReentrantLock(使用 ...
- java存取数据库的包_提供JAVA存取数据库能力的包是 ( )。
提供JAVA存取数据库能力的包是 ( ). 答:java.sql I feel so excited! At this time tomorrow morning, I ____ to Shangha ...
- java源码聊天软件_【原创】基于Java NIO的多人在线聊天工具源码实现(登录,单聊,群聊)...
近来在学习Java NIO网络开发知识,写了一个基于Java NIO的多人在线聊天工具MyChat练练手.源码公开在Coding上: 编写一个基于Java NIO的多人在线聊天工具,需要以下几方面的知 ...
- java模拟数据库压测_java应用的优化【转】
XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务. 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升.为了使广大对公客户使用系统时获得 ...
- java模拟数据库压测_java模拟数据库缓存
实现缓存一些数据到本地,避免重复查询数据库,对数据库造成压力,代码如下: package threadLock; import java.util.HashMap; import java.util. ...
- dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
最近忙于公司的全链路压测平台调研和技术规划文档输出工作,参考了全网能搜到的业内大厂的全链路压测方案,这里做个汇总,以及将个人认为可以落地的方案做一个关键点整理. 技术链接 滴滴全链路压测解决之道 阿里 ...
- shell 压测_shell写一个压测脚本
ab命令 ab是apache下面的一个性能压测工具 yum install -y httpd-tools ab -n 1000 -c 10 http://xxxx # -n 请求数 -c 并发数 基于 ...
- java实现数据库内容修改_数据库更改到Java环境中实现可持续和平
java实现数据库内容修改 对我们而言,可持续和平正在消除不确定性. 在这种情况下,由于数据库更改,欢迎使用Ruby的Active Record Migrations . 迁移对我们意味着什么? 嗯, ...
最新文章
- 【深度学习】你心目中 idea 最惊艳的深度学习领域论文是哪篇?
- ANTLR 4(一)Getting Started
- Arrays.asList()使用时的注意事项,这个结论同可适用于Stream.of()___Arrays.stream和Stream.of
- CAN笔记(10) 错误种类和输出
- 移动端vue实现部门结构功能_基于Vue的组织架构树组件
- python3 写入excel_Python3 读、写Excel文件的操作方法
- linux中config文件怎么打开,linux-如何使用CoreOS的cloud-config文件启动Dock...
- lua table remove元素的问题
- 斗鱼显示弹幕服务器连接失败,斗鱼看不到弹幕怎么办 斗鱼无法看到弹幕的解决方法...
- 【论文笔记】Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
- 那些陪伴了我大学青春的网易博客也要停运啦
- 微信浏览器内打开App Store链接,并跳转到App指定安装页面
- 数据库恢复时出现诸如“设备激活错误
- 为什么单片机只有可以整除8的特殊寄存器能够位寻址?
- 多亏了这几款软件,我才能坚持写博客这么多年!
- 大数据概论 (理论基础)
- 视频教程-Java进阶高手课-Spring精讲精练-Java
- kass中lisp文件_Lisp之文件操作
- 诺基亚C2-03 - 简单应优先处理的诺基亚C2-03
- SSR和CSR的区别
热门文章
- mate 10android o主题,Mate10不仅硬件强,还有安卓8.0
- vue怎么截取时间年月_Vue + Element 获取标准时间、时间戳进行转换与操作(年月日)...
- 全国计算机等级考试 架构师的设计模式
- coreldraw的线条怎么变成圆头_别再穿到处撞的小白鞋了,这五款春夏小皮鞋,不管怎么搭配都好看...
- 【Python教程】读写ini配置文件的详细操作
- python 两种多线程比较
- gogs mysql 报错_docker上对gogs二次开发
- java canonicalize_java.io.IOException:java.io.WinNTFileSystem.canonicalize0处的无效参数
- 计算机二级vb重点知识,计算机二级《VB》历年考试重点知识
- 曼哈顿距离java实现_基于javascript实现获取最短路径算法代码实例