上回说到了猿哥(程序猿)遇到了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();语句,通过了单元测试,并