性能测试做到后面,一些特殊的场景利用常用的现成工具满足不了需求,所以你需要学习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 个类相关推荐

  1. java模拟atm 课程设计_急求,关于Java课程设计ATM创建实现

    展开全部 我现写的: import java.util.Scanner;public class ATM { private static String theName = "admin&q ...

  2. java锁的有哪些_「并发编程」Java锁分类和特点有哪些

    公平锁.非公平锁:公平锁指多个线程按照申请锁的顺序来获取锁,非公平锁就是没有顺序完全随机,所以能会造成优先级反转或者饥饿现象:synchronized 就是非公平锁,ReentrantLock(使用 ...

  3. java存取数据库的包_提供JAVA存取数据库能力的包是 ( )。

    提供JAVA存取数据库能力的包是 ( ). 答:java.sql I feel so excited! At this time tomorrow morning, I ____ to Shangha ...

  4. java源码聊天软件_【原创】基于Java NIO的多人在线聊天工具源码实现(登录,单聊,群聊)...

    近来在学习Java NIO网络开发知识,写了一个基于Java NIO的多人在线聊天工具MyChat练练手.源码公开在Coding上: 编写一个基于Java NIO的多人在线聊天工具,需要以下几方面的知 ...

  5. java模拟数据库压测_java应用的优化【转】

    XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务. 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升.为了使广大对公客户使用系统时获得 ...

  6. java模拟数据库压测_java模拟数据库缓存

    实现缓存一些数据到本地,避免重复查询数据库,对数据库造成压力,代码如下: package threadLock; import java.util.HashMap; import java.util. ...

  7. dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案

    最近忙于公司的全链路压测平台调研和技术规划文档输出工作,参考了全网能搜到的业内大厂的全链路压测方案,这里做个汇总,以及将个人认为可以落地的方案做一个关键点整理. 技术链接 滴滴全链路压测解决之道 阿里 ...

  8. shell 压测_shell写一个压测脚本

    ab命令 ab是apache下面的一个性能压测工具 yum install -y httpd-tools ab -n 1000 -c 10 http://xxxx # -n 请求数 -c 并发数 基于 ...

  9. java实现数据库内容修改_数据库更改到Java环境中实现可持续和平

    java实现数据库内容修改 对我们而言,可持续和平正在消除不确定性. 在这种情况下,由于数据库更改,欢迎使用Ruby的Active Record Migrations . 迁移对我们意味着什么? 嗯, ...

最新文章

  1. 【深度学习】你心目中 idea 最惊艳的深度学习领域论文是哪篇?
  2. ANTLR 4(一)Getting Started
  3. Arrays.asList()使用时的注意事项,这个结论同可适用于Stream.of()___Arrays.stream和Stream.of
  4. CAN笔记(10) 错误种类和输出
  5. 移动端vue实现部门结构功能_基于Vue的组织架构树组件
  6. python3 写入excel_Python3 读、写Excel文件的操作方法
  7. linux中config文件怎么打开,linux-如何使用CoreOS的cloud-config文件启动Dock...
  8. lua table remove元素的问题
  9. 斗鱼显示弹幕服务器连接失败,斗鱼看不到弹幕怎么办 斗鱼无法看到弹幕的解决方法...
  10. 【论文笔记】Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
  11. 那些陪伴了我大学青春的网易博客也要停运啦
  12. 微信浏览器内打开App Store链接,并跳转到App指定安装页面
  13. 数据库恢复时出现诸如“设备激活错误
  14. 为什么单片机只有可以整除8的特殊寄存器能够位寻址?
  15. 多亏了这几款软件,我才能坚持写博客这么多年!
  16. 大数据概论 (理论基础)
  17. 视频教程-Java进阶高手课-Spring精讲精练-Java
  18. kass中lisp文件_Lisp之文件操作
  19. 诺基亚C2-03 - 简单应优先处理的诺基亚C2-03
  20. SSR和CSR的区别

热门文章

  1. mate 10android o主题,Mate10不仅硬件强,还有安卓8.0
  2. vue怎么截取时间年月_Vue + Element 获取标准时间、时间戳进行转换与操作(年月日)...
  3. 全国计算机等级考试 架构师的设计模式
  4. coreldraw的线条怎么变成圆头_别再穿到处撞的小白鞋了,这五款春夏小皮鞋,不管怎么搭配都好看...
  5. 【Python教程】读写ini配置文件的详细操作
  6. python 两种多线程比较
  7. gogs mysql 报错_docker上对gogs二次开发
  8. java canonicalize_java.io.IOException:java.io.WinNTFileSystem.canonicalize0处的无效参数
  9. 计算机二级vb重点知识,计算机二级《VB》历年考试重点知识
  10. 曼哈顿距离java实现_基于javascript实现获取最短路径算法代码实例