Сразу вопрос: Почему с использованием try with resources поток (file) закрывается досрочно, а используя классический try все хорошо?
2 потока (нити), каждый читает свой файл построчно, пишут в разные списки. В конце вывод списков на экран.
upd: запускал и разные файлы и один и тот же, результат - почти всегда ексепшн. Формат файлов тоже разный, и просто созданные без расширения файлы.
Результат не предсказуем (сработает, не сработает), но почти всегда это исключение.
public class Solution {
public static List<String> list1 = new ArrayList<>();
public static List<String> list2 = new ArrayList<>();
public static void main(String[] args) {
ReadFiles thread1 = new ReadFiles("thread1");
ReadFiles thread2 = new ReadFiles("thread2");
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(list1);
System.out.println(list2);
}
}
class ReadFiles extends Thread {
List<String> list;
String data;
ReadFiles(String name) {
super(name);
}
@Override
public void run() {
try (BufferedReader fileName = new BufferedReader(new InputStreamReader(System.in));
BufferedReader file = new BufferedReader(new FileReader(fileName.readLine()))) {
if (getName().equals("thread1")) {
list = Solution.list1;
} else if (getName().equals("thread2")) {
list = Solution.list2;
}
while((data = file.readLine()) != null) {
list.add(data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}