gpt4 book ai didi

java - JAVA中跨线程统一分割目录中的文件

转载 作者:行者123 更新时间:2023-12-01 18:55:52 25 4
gpt4 key购买 nike

我在目录中有一个可变的文件列表,并且在 Java 中有不同的线程来处理它们。线程根据当前处理器而变化

int numberOfThreads=Runtime.getRuntime().availableProcessors();

File[] inputFilesArr=currentDirectory.listFiles();

如何跨线程统一分割文件?如果我做简单的数学,比如

int filesPerThread=inputFilesArr.length/numberOfThreads

如果 inputFilesArr.lengthnumberOfThreads 不能完全被彼此整除,那么我最终可能会丢失一些文件。有什么有效的方法可以使所有线程之间的分区和负载保持一致?

最佳答案

这是对此问题的另一种看法:

  1. 使用java的ThreaPoolExecutorHere is an example
  2. 它的工作原理是线程池(您不需要每次需要时都创建线程,而是在开始时创建指定数量的线程并使用池中的线程)
  3. 想法是将目录中每个文件的处理视为独立任务,由每个线程执行。
  4. 现在,当您将所有任务提交给循环中的执行程序时(这可以确保没有遗漏任何文件)。
  5. 执行器实际上会将所有这些任务添加到队列中,同时它会从线程池中获取线程并为它们分配任务,直到所有线程都完成为止很忙。
  6. 等待直到线程变得可用。因此配置线程池大小在这里至关重要。您可以拥有与文件数量一样多的线程,也可以拥有比文件数量更少的线程。

这里我做了一个假设,每个要处理的文件都是相互独立的,并且不需要单个线程处理某一堆文件。

关于java - JAVA中跨线程统一分割目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com