Многопоточный компилятор, возвращающий разные выходные данные при быстром повторении выполнения
У меня есть многопоточный компилятор, разработанный на Java. Он получает n файловых путей и запускает один поток для каждого полученного файлового пути.
Все работает нормально, если я выполняю несколько операций с одним файлом. Однако, когда я вводю несколько файлов и выполняю их один раз в секунду, они показывают разные результаты синтаксического анализа в загруженном исходном коде.
Это было реализовано с использованием метода парсера рекурсивного спуска. Функция, которая вызывает потоки, показана следующим образом:
public static void main(String[] args) {
if(args.length == 0){
System.out.println("No file path informed. Please inform file paths.");
System.out.println("Usage: java -jar KPiler.jar file1.txt file2.txt");
}
List<String> paths = new ArrayList<>();
List<String> errorMessages = new ArrayList<>();
List<Parser> compileJobs = new ArrayList<>();
paths.addAll(Arrays.asList(args));
while(paths.size() > 0 || compileJobs.size() > 0){
if(compileJobs.size() < MAX_JOBS && paths.size() > 0){
compileJobs.add(new Parser(paths.remove(0)));
compileJobs.get(compileJobs.size() -1).start();
}
for(int i=0 ; i<compileJobs.size(); i++){
if(!compileJobs.get(i).isAlive()){
errorMessages.add(compileJobs.get(i).getErrorMessages());
compileJobs.remove(i);
}
}
}
//PRINTING OUTPUT
for(int i = 0; i<errorMessages.size(); i++){
System.out.println(errorMessages.get(i));
}
}
Связано ли это с несколькими обращениями к файлам?