在我之前的一个问题上,我发布了:
我必须阅读几个非常大的 txt 文件,并且必须使用多个线程或单个线程来执行此操作,具体取决于用户输入。假设我有一个获取用户输入的 main 方法,并且用户请求一个线程并希望为该线程处理 20 个 txt 文件。我将如何做到这一点?请注意,以下不是我的代码或其设置,而只是“想法”。
例子:
int numFiles = 20;
int threads = 1;
String[] list = new String[20];
for(int i = 1; i < 21; i++){
list[i] = "hello" + i + ".txt";//so the list is a hello1.txt, hello2.txt, ..., hello20.txt
}
public void run(){
//processes txt file
}
总而言之,我将如何使用单个线程完成此操作?有20个线程?
一位用户建议使用 threadPools:
当用户指定要使用的线程数时,您将适当地配置池,提交一组文件读取作业,并让池对执行进行排序。在 Java 世界中,您将使用 Executors.newFixedThreadPool 工厂方法,并将每个作业作为 Callable 提交。这是 IBM 的一篇关于 Java 线程池的文章。
所以现在我有一个名为 sortAndMap(String x) 的方法,它接受一个 txt 文件名并进行处理,对于上面的例子,会有
Executors.newFixedThreadPool(numThreads);
如何将它与 threadPools 一起使用,以便我上面的示例可行?