Подскажите разве у меня :
1. После запуска каждая нить ReadThread не создает свой поток для чтения из файла? если нет то как выполняется программа?
2. Разве не все потоки и нити закрыты?
3. если я в такой элементарной программе не вижу где закрыты потоки и где есть валидатор который говорит что не так, то как не допускать ошибок при самостоятельной работе?
package com.javarush.task.task18.task1823;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/*
Нити и байты
*/
public class Solution {
public static Map<String, Integer> resultMap = new HashMap<String, Integer>();
static String fileName;
public static void main(String[] args) throws IOException, InterruptedException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String s = reader.readLine();
if (s.equals("exit")){
reader.close();
break;
}
else {
Solution.fileName = s;
ReadThread readThread = new ReadThread(fileName);
readThread.run();
readThread.join();
}
for (Map.Entry d : resultMap.entrySet()){
System.out.println(d.getKey() + " " + d.getValue());
}
}
}
public static class ReadThread extends Thread {
public ReadThread(String fileName) throws IOException {
//implement constructor body
fileName = new Solution().fileName;
BufferedReader file = new BufferedReader(new FileReader(fileName));
fileRead(file);
file.close();
}
// implement file reading here - реализуйте чтение из файла тут
public void fileRead(BufferedReader file) throws IOException {
int max = 0;
Integer byyte = null;
HashMap<Integer, Integer> map = new HashMap();
while (file.ready()) {
int i = file.read();
if (map.containsKey(i))
map.put(i, map.get(i) + 1);
else
map.put(i, 1);
}
for (Map.Entry k : map.entrySet()) {
int f = (int) k.getValue();
if (f > max) {
max = f;
}
}
for (Map.Entry k : map.entrySet()) {
int f = (int) k.getValue();
if (f == max) {
byyte = (Integer) k.getKey();
System.out.println(byyte);
}
}
resultMap.put(fileName,byyte);
}
}
}