java 线程池实现多线程处理list数据

newFixedThreadPool线程池实现多线程

复制代码
		List<PackageAgreementEntity> entityList = new CopyOnWriteArrayList<>();
        //多线程   10个线程
        //int threadNum = 10;
        int listSize = 300;
        List<List<PackageAgreementDto>> splitData = Lists.partition(packageAgreementList, listSize);
        //CountDownLatch latch = new CountDownLatch(splitData.size());
        //声明线程池对象
        ExecutorService touchWorker = Executors.newFixedThreadPool(splitData.size());
        //不加这个会导致线程不安全,丢失数据
        Semaphore semaphore = new Semaphore(splitData.size());//定义几个许可
        List<PackageAgreementErroDto> errorList2 = new CopyOnWriteArrayList();

        for (int i = 0; i < packageAgreementList.size(); i++) {
            final  int j = i;
            semaphore.acquire();
            touchWorker.execute(()->{
                try {
                        logger.info(Thread.currentThread().getName()+ j);
                        logger.info("数据第几条:" + j);
                        //校验物料、供应商、ou、地点信息是否存在
                        packageAgreementService.checkMultiData(packageAgreementList.get(j), j ,user, dateFormat,  errorList2, entityList);

                        semaphore.release();
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            });
        }
        //每隔10s检测线程是否执行结束
        boolean flag = touchWorker.awaitTermination(10, TimeUnit.SECONDS);
         if(!flag){
            logger.info("一揽子协议价格录入完成!");
        }

需要注意的问题点,多线程处理List数据可能发生线程不安全,

引入CopyOnWriteArrayList,Semaphore解决,或者加锁解决问题;所有线程执行完毕后再进行后续业务的处理,引入awaitTermination()方法。

相关推荐
打工仔折腾 AI16 分钟前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
ZealSinger23 分钟前
Java虚拟线程上线后瓶颈转移到哪看三层
java·开发语言·firefox
2601_9611332828 分钟前
盘立方软件指标文华期货公式下载
java
蜗牛互联网35 分钟前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
Sirens.1 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
sunshine22 girl2 小时前
Java学习五 面向对象高级5 内部类1
java·学习
用户1305180712153 小时前
JDBC学习DAY2:从Statement到PreparedStatement
java
蛋蛋的就会顺顺的4 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
周杰偷奶茶4 小时前
【Java】数组的定义和使用(附管理系统实战案例)
java·开发语言
橙子圆1234 小时前
JUC之集合类不安全
java·开发语言