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

这篇具有很好参考价值的文章主要介绍了多线程处理文件集合,先拆分,在执行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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个小集合中。文章来源地址https://www.toymoban.com/news/detail-723763.html

到了这里,关于多线程处理文件集合,先拆分,在执行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 多线程分批切割处理 大数据量List集合 ,实用示例

    哲学提问镇贴: 不了解异步怎么使用的看官, 可阅: SpringBoot 最简单的使用异步线程案例 @Async_小目标青年的博客-CSDN博客 Springboot Async异步扩展使用 结合 CompletableFuture_小目标青年的博客-CSDN博客 想了解更多关于批量list处理操作的看官,可阅:   Java List数据量大, 需要分片

    2024年02月06日
    浏览(64)
  • Java 8并发集合:安全高效的多线程集合

    在多线程环境中,使用线程安全的数据结构非常重要,以避免竞态条件和数据不一致的问题。Java 8引入了一些并发集合类,提供了安全高效的多线程集合操作。本教程将介绍Java 8中的并发集合类,包括ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentSkipListSet和CopyOnWriteArrayList。 Conc

    2024年02月04日
    浏览(55)
  • java基础之线程安全问题以及线程安全集合类

    当多个线程同时访问同一个临界资源时,原子操作可能被破坏,会导致数据丢失, 就会触发线程安全问题 临界资源: 被多个线程同时访问的对象 原子操作: 线程访问临界资源的过程中不可更改和缺失的操作 互斥锁 每个对象都默认拥有互斥锁, 该锁默认不开启. 当开启互斥锁之后

    2024年01月18日
    浏览(60)
  • 从零学Java 线程安全的集合

    Collection体系集合、以及线程安全集合。 注:下划线代表线程安全集合 Collections中的工具方法 Collections工具类中提供了多个可以获得线程安全集合的方法。 public static Collection synchronizedCollection(Collection c) public static List synchronizedList(List list) public static Set synchronizedSet(Set s) public

    2024年01月17日
    浏览(33)
  • 【JAVA】哪些集合类是线程安全的

    🍎 个人博客: 个人主页 🏆 个人专栏: JAVA ⛳️   功不唐捐,玉汝于成 目录 前言 正文 Vector: HashTable: Collections.synchronizedList()、Collections.synchronizedSet()、Collections.synchronizedMap(): 4.ConcurrentHashMap: 5.CopyOnWriteArrayList 和 CopyOnWriteArraySet: 结语  我的其他博客 在多线程编程中

    2024年01月25日
    浏览(38)
  • java中pdfbox处理pdf常用方法(读取、写入、合并、拆分、写文字、写图片)

    方法代码: 测试用例: 2.1写文字 方法代码: 测试用例: A.pdf: A2.pdf: 2.2写图片 方法代码: 测试用例: A.pdf: pic.jpg: A2.pdf: 方法代码: 测试用例: 方法代码: 测试用例: 引用链接: (17条消息) 使用Apache PDFBox实现拆分、合并PDF_似有风中泣的博客-CSDN博客 (17条消息) Java使用P

    2024年02月11日
    浏览(128)
  • JAVA数据结构篇--13线程安全的Set 集合

    前言:java 中用于存放不重复元素的set 集合,其中无序的HashSet,以及有序的LinkedHashSet和TreeSet 都是非线程安全的,那么多线程环境下,我们要存放不重复的元素,需要使用哪种集合进行数据存取; 1 使用: 2 过程: 2.1 放入获取元素: Collections.synchronizedSet:通过使用synchron

    2024年02月16日
    浏览(41)
  • Java - JUC(java.util.concurrent)包详解,其下的锁、安全集合类、线程池相关、线程创建相关和线程辅助类、阻塞队列

    JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题 java.lang.Thread.State tools(工具类):又叫信号量三组工具类,包含有 CountDownLatch(闭锁) 是一个同步辅助类,在完成一组正在其他线程中

    2024年02月05日
    浏览(35)
  • java Spring Boot将不同配置拆分入不同文件管理

    关于java多环境开发 最后还有一个小点 我们一般会将不同的配置 放在不同的配置文件中 好处肯定就在于 想换的时候非常方便 那么 我们直接看代码 我们将项目中的 application.yml 更改代码如下 这里 意思是 我们选择了dev 环境 然后创建一个文件 叫 application-dev.yml 参考代码如下

    2024年02月11日
    浏览(65)
  • 循环交替执行多线程任务-Java

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包