我正在尝试使用执行程序服务来教自己使用多线程,并且想知道在下面实现我的代码的最佳实践是什么-我正在阅读文本文件目录并检查字符/单词-
如果我所做的只是通过文件列表对每个线程进行处理,我也很困惑是否正在使用多个线程。是否同时处理多个文件?
主班
public class Application {
private long totalCharacterCount;
private long totalLineCount;
private final File[] fileList;
private final static String _DIRECTORY = "src//documents";
public Application(String directory){
fileList = new File(directory).listFiles();
}
public synchronized File[] getFileList(){
return fileList;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(4);
Application x = new Application(_DIRECTORY);
for(File file : x.getFileList()){
Future<FileReadings> response = executor.submit(new Process(file));
x.totalCharacterCount += response.get().characterCount;
x.totalLineCount += response.get().lineCount;
}
System.out.println("Total lines in all documents: " + x.totalLineCount);
System.out.println("Total characters in all documents: " + x.totalCharacterCount);
executor.shutdown();
}
}
进程类
public class Process implements Callable<FileReadings> {
private FileReadings object;
private File file;
public Process(File file){
FileReadings obj = new FileReadings();
this.object = obj;
this.file = file;
}
public void CountCharacters(File file){
int count = 0;
try {
BufferedReader reader = Files.newBufferedReader(file.toPath());
while(reader.read() != -1){
count++;
}
object.characterCount = reader.read();
} catch (IOException ex) {
ex.printStackTrace();
}
object.characterCount = count;
}
慕田峪4524236
相关分类