当前位置: 首页 > news >正文

多线程处理文件集合,先拆分,在执行

try {File file = new File(path);File[] files = file.listFiles();log.info("当前共有文件 "+files.length+"个");List<File> filesList = new ArrayList<>(Arrays.asList(files));List<List<File>> dividedLists = SplitListUtils.splitList(filesList, 10);int numThreads = Math.min(10, dividedLists.size());  // 获取实际的任务数量log.info("线程数:"+ numThreads);// 创建线程池并执行任务ExecutorService executor = Executors.newFixedThreadPool(numThreads);for (List<File> subFiles : dividedLists) {executor.execute(() -> processFiles(subFiles));}executor.shutdown();boolean finished = false;try {finished = executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch (InterruptedException e) {// 处理中断异常e.printStackTrace();}// 在执行完所有任务后继续后面的操作处理 collect_task 结束if (finished) {// 所有任务已完成,可以执行后续操作System.out.println("ok.....");} else {// 等待超时或者被中断,可以根据需要进行处理System.out.println("执行中....");}} catch (Exception e) {e.printStackTrace();}
 public static  List<List<File>> splitList(List<File> list, int numLists) {List<List<File>> dividedLists = new ArrayList<>();int size = list.size();int average = size / numLists;int remainder = size % numLists;int index = 0;for (int i = 0; i < numLists; i++) {int sublistSize = average + (i < remainder ? 1 : 0);List<File> sublist = new ArrayList<>(list.subList(index, index + sublistSize));if(sublist.size() > 0){dividedLists.add(sublist);}index += sublistSize;}return dividedLists;}

上面代码的拆分, 最多集合是10个,如果大集合的总数小于10,那就是大集合的数量。要是大集合的数量大于10个,那就均分到10个小集合中。

http://www.lryc.cn/news/196763.html

相关文章:

  • 将excel表中的英文自动翻译成中文
  • Junit 集成测试
  • Orleans的成员管理和故障检测故障检测
  • 分类选择,最多五级
  • ASP.NET framework升级core .NET 6.0
  • BootStrap-前端框架
  • 解读 | 自动驾驶系统中的多视点三维目标检测网络
  • C++ 用户学习 Python 的最佳方法
  • 使用docker搭建drogon windows10,linux,mac下开发环境
  • 【RKNN】YOLO V5中pytorch2onnx,pytorch和onnx模型输出不一致,精度降低
  • 六分科技CEO李阳:精准定位助力汽车智能化普及
  • 信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(六):衰减和dB
  • 吃鸡达人必备:分享顶级干货+作图工具推荐+账号安全查询!
  • 帆软报表解决单元格不显示问题
  • LeetCode讲解篇之138. 随机链表的复制
  • 主定理(简化版)
  • HTTP1.0和HTTP2.0的区别
  • ARM资源记录《AI嵌入式系统:算法优化与实现》第八章(暂时用不到)
  • 微信小程序2
  • G.711语音编解码器详解
  • 蓝桥杯每日一题2023.10.17
  • 16.SpringBoot前后端分离项目之简要配置一
  • Probability Calibration概率校准大比拼:性能、应用场景和可视化对比总结
  • PHP 球鞋在线商城系统mysql数据库web结构apache计算机软件工程网页wamp计算机毕业设计
  • 使用Apache和内网穿透实现私有服务公网远程访问——“cpolar内网穿透”
  • PreparedStatement
  • CSS3 新增属性-边框圆角-文字阴影-盒子阴影
  • 制作.a静态库 (封盒)
  • 一台服务器,一个新世界
  • keep-alive 是 Vue 的一个内置组件,用于缓存其他组件的实例,以避免重复渲染和销毁,它可以在需要频繁切换的组件之间提供性能优化