一、最近在做一个分页查询,但是数据量太大,由于条件可以很大,且由于mysql数据库数据量也大,关联的表多,如果只是优化sql已经很难实现业务要求,当然业务要求不那么实时,因为有数据统计的意味,大多数权限的用户是不会那么查询的,但是至少不能几分钟也查询不出来吧,可是如果条件太大即使是单个页面数据查询都很难查询出来,所以想办法把IN里面的条件通过多线程计算汇总,至少不会系统卡死,故用到CountDownLatch,但新问题是每次都需要把条件IN里面的数据查询一遍,这样的坏处是浪费资源+内存,好处是至少可以查出来,虽然这种场景一般不会这样操作,但是操作不骚,气氛不高。分享出来希望有人有更好的处理办法学习学习。
1、创建线程池。
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("test-countDownLatch-pool-%d").build();
ExecutorService executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
2、创建CountDownLatch ,其中s