• 创建线程池执行java代码逻辑


    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    • 1
    • 2
    • 3
    private void exeBathThread(List<XXX> allList){
    		if(allList.isEmpty()){
    			log.info("----------------集合为空-----------------------");
    			return;
    		}
    		try {
    		    // 切割集合数据,36个为一组在同个线程中执行,数字可自己进行更改
    		    // 可为其它数据格式,自己根据需求变动
    		    // List>> lists = Lists.partition(listMap, 36);
    		    // List> lists = Lists.partition(list, 36);
    			List<List<XXX>> lists = Lists.partition(allList,36);
    			log.info("---------------------------多线程集合切割分组,size={},group={}",36,lists.size());
    			// 创建线程池子
    			ExecutorService executorService = Executors.newCachedThreadPool();
    			// 线程同步围栏
    			CountDownLatch cdl = new CountDownLatch(lists.size());
    			long startList = System.currentTimeMillis();
    			log.info("---------------------------多线程主线程开始,time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    			// 线程池中取线程 执行集合
    			lists.forEach(list->
    				executorService.submit(() -> {
    					// 业务数据处理
    					// ......
    					// 递减锁存器的计数,如果计数到达零,则释放所有等待的线程
    					cdl.countDown();
    			}));
    
    			// 主线程等待子线程执行完成再继续执行
    			cdl.await();
    			// 关闭线程池
    			executorService.shutdown();
    			log.info("---------------------------多线程主线程结束,time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    			long endList = System.currentTimeMillis();
    			log.info("---------------------------多线程主线程结束,耗时[{}]秒",(endList - startList)/1000);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    作者:鲨鱼辣椒灬
    来源:CSDN

  • 相关阅读:
    debian无法使用reboot 等系统命令解决
    误格式化硬盘怎么办?分享硬盘格式化恢复的实用方法
    电子工程领域老牌期刊IET Radar, Sonar & Navigation发展历史(始于1872年)
    计算机网络 --- TCP与UDP协议
    angular之formgroup
    基于PHP+MySQL米步童鞋商城网站的设计与实现
    win命令行中导入、导出数据库相关表
    java-php-python-贝壳找房系统计算机毕业设计
    单位固定资产应该怎么管理
    TiDB的事务概览
  • 原文地址:https://blog.csdn.net/ll594317566/article/details/127652922