0
点赞
收藏
分享

微信扫一扫

JAVA 多线程、异步示例

我阿霆哥 2022-01-06 阅读 67
        List<Cbzl> cbzls = new ArrayList<>();
        // 开启多线程
        ThreadPoolExecutor threadPoolExecutor = ThreadUtil.newExecutor(20, 10000);
        List<List<String>> searchPartitons = Lists.partition(new ArrayList<>(cmdmSet),50);
        // 每个线程都会独立执行,并且不确定哪个线程先执行完,因此需要加一个等待函数(视情况分析,例如发邮件不用拦截),
        // eg:例如现在有五组,countdownlatch个数为5
        // 当执行完某个线程时,countdown()就会减一,当减到0时,await()(相当于栅栏)就会检测到全部执行完,就可以进行放行
        // await()方法主要作用就是让主线程暂停等待子线程执行完后,在执行主线程后面的程序,确保cbzlList全部add上
        CountDownLatch countDownLatch = ThreadUtil.newCountDownLatch(searchPartitons.size());
        for (List<String> searchPartition : searchPartitons) {
            threadPoolExecutor.execute(() -> {
                LambdaQueryWrapper<Cbzl> queryWrapper = new LambdaQueryWrapper<>();
                queryWrapper.in(Cbzl::getCmdm, searchPartition);
                List<Cbzl> cbzlList = this.cbzlMapper.selectList(queryWrapper);
                cbzls.addAll(cbzlList);
                countDownLatch.countDown();
            });
        }
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return cbzls;
举报

相关推荐

0 条评论