forkAndjoin线程池与普通线程池比较

       最近项目在做excel导出时,需要设置从数据库查询出来的某个字段的值。由于数据量较大,经常出现导出时响应太慢的问题。所以打算用多线程优化一下。

      我在本地做了一个实验,先在数据库中,插入10万条数据。然后分别测试量3种情况:

     1.不使用多线程直接单线程修改forkAndjoin线程池与普通线程池比较_第1张图片

测试来一下时间大概是9秒

2.使用普通线程池+countdownLatch(这个也是项目中以前的用法)

forkAndjoin线程池与普通线程池比较_第2张图片

看了一下时间大概是6s多

3.使用forkAndJoin框架

   相信大家已经看出来了,普通线程池+countDownLatch的缺点在于,每个线程执行完成之后调用countDownLatch.await()方法会被阻塞。而forkAndJoin就不同了,该线程池使用的是工作窃取机制,每个线程执行完自己的任务之后会从队列的末尾(该线程池将任务放在队列中)获取任务来执行。比阻塞线程效率理论上来的高(注意:仅仅是理论上),代码太长大家自己去我的github看吧需要重点注意的是阈值的选取,这个是提高效率的关键。我试了很多次,最终将时间降为4s

 

你可能感兴趣的:(forkAndjoin线程池与普通线程池比较)