利用闭包实现自定义等待方法#yyds干货盘点#
Posted FunTester
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用闭包实现自定义等待方法#yyds干货盘点#相关的知识,希望对你有一定的参考价值。
我在最近学习多线程编程的过程中,时长需要测试各类多线程工具类或者框架在各种线程数下的性能。基本的思路就是准备数据,编写用例方法,执行用例方法,最后等待结束,统计计算测试数据。
其中倒数第二个步骤:等待结束,之前我在Java自定义异步功能实践文章中用到看java.util.concurrent.Phaser
这个多线程同步类完成。但是在最近的异步编程实践中,我用到了更多闭包的语法,例如:
public static void main(String[] args)
//自定义异步任务
def funtester =
fun
//syncDoingsomething()
//单开10个线程执行异步任务
10.times funtester()
通过闭包的语法将异步任务的内容封装成另外一个方法,然后通过多次执行异步方法来完成多线程任务,这样写比较简单,而且非常具有可读性,如果使用java.util.concurrent.Phaser
作为第二个参数,显得有些凌乱,不够优雅,比如:
public static void main(String[] args)
def phaser = new Phaser(10)
//自定义异步任务
def funtester =
fun(
//syncDoingsomething()
, phaser)
//单开10个线程执行异步任务
10.times funtester()
所以我就有了一个单独实现自定义等待方法的需求,就是设置一个或者多个判定条件,一直等待这个判定条件和条件组合符合预期,才释放当前线程,继续运行下去。经过了之前的异步和闭包的学习,我很快找到了一个简单的解决方案。如下:
/**
* 自定义等待,间隔0.5s
*
* @param f
*/
public static void waitFor(Supplier<Boolean> f)
while (!f.get())
sleep(0.5);
使用方法介绍:场景,我们需要10个线程分别计算某一类数据结果,然后将数据结果存入一个列表中(需线程安全,不然会偶发数量对不上),按照上面的思路,就是执行完10个异步任务,然后等待所有线程执行完。我使用了列表长度作为等待对象,代码如下:
waitFor(ts.size() > 10)
//下面也行
waitFor ts.size() > 10
最近会对Java各种队列进行压测,会用到这个功能,欢迎持续关注。
PS:本文使用Groovy,若无特殊需求,我一般使用Groovy作为脚本语言。
Have Fun ~ Tester !
- FunTester2021年总结
- 2022年度计划手册模板
- 分享一份Fiddler学习包
- Selenium自动化的JUnit参数化实践
- 性能测试框架中QPS取样器实现
- 如何测试非固定型概率算法P=p(1+0.1*N)
- 移动测试工程师职业
- Groovy热更新Java实践
- Java线程安全ReentrantLock
- 接口测试代码覆盖率(jacoco)方案分享
- Selenium Python使用技巧(三)
- 控制台彩色输出
以上是关于利用闭包实现自定义等待方法#yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
# yyds干货盘点 # 编写一个闭包函数,要实现的功能是计数功能
#yyds干货盘点# springcloud整合gateway实现网关全局过滤器功能
为record类型自定义Equals方法 #yyds干货盘点#