java junit 多线程_用Junit测试多线程的正确姿势

本文通过一个Java程序员在使用Junit测试多线程时遇到的问题,探讨了如何正确进行多线程测试,特别是涉及到Mybatis分页插件PageHelper的情况。通过引入CountDownLatch解决了线程执行顺序问题,并展示了如何手动和自动清理PageHelper的分页资源,确保测试的准确性。
摘要由CSDN通过智能技术生成

上回说到了猿哥(程序猿)遇到了Pagehelper分页问题,最后大师(架狗师)帮其解惑,猿哥茅塞顿开,对Mybatis的分页插件有了更加深入的了解。猿哥孜孜不倦对技术的渴望那是非常人所能及的,力求完全搞懂源码背后的原理。此时猿哥又脑洞大开,又要开始折腾自己了,想要写个测试代码来验证大师所说的那些技术问题。有趣的事情又发生了...

线程池模拟发起数据查询任务

首先,猿哥想到的是怎么样去模拟发起多次请求而且这2次请求还要分给同一个线程去执行,猿哥想到了JDK里面的线程池,于是二话不说,就开干,龙飞凤舞的写出了下面一段用Junit写的测试代码段如下,该代码段用了ExecutorService来创建一个固定的只有一个线程的线程池executor,然后写了2个任务,这2个任务一个只执行了PageHelper.startPage(1,10);分页操作,就没有继续数据库查询操作,另外一个是没有分页操作的查询全部数据的业务代码块,这样测试代码就准备好了,接下来就执行并验证本来没有执行分页的查询全部的数据最后返回的结果的条数。

@Test

public void test() throws InterruptedException {

ExecutorService executor = Executors.newFixedThreadPool(1);

Runnable task = () -> {

PageHelper.startPage(1,10);

};

executor.submit(task);

Runnable task1 = () ->{

List list = userBusiness.selectAll();

log.info("task1查询结果:"+list.size());

};

executor.submit(task1);

}

新问题的出现

猿哥非常自信的用debug模式运行了上面的测试代码段,奇怪的事情发生了,程序并没有像之前预料的一样输出查询结果集总条数,现象就像task1任务并没有执行一样,猿哥甚是费解啊,为啥不能执行呢?猿哥第一反应是不是selectAll方法有问题,于是猿哥单独运行了这个List list = userBusiness.selectAll();语句,通过了单元测试,并

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值