我必须阅读几个非常大的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个线程?
答案 0 :(得分:3)
听起来你需要一个可配置的线程池,每个文件读取操作都是一个要提交到该池中的工作。
当用户指定要使用的线程数时,您需要适当地配置池,提交一组文件读取作业,并让池对执行进行排序。
在Java世界中,您使用Executors.newFixedThreadPool工厂方法,并将每个作业提交为Callable。关于Java线程池的Here's an article from IBM。