package com.javarush.task.task18.task1823;
import java.io.*;
import java.util.*;
/*
Нити и байты
*/
public class Solution {
public static Map<String, Integer> resultMap = new HashMap<String, Integer>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = "";
while (true){
file = reader.readLine();
if(file.equals("exit")){
break;
}
Thread t = new ReadThread(file);
t.start();
}
}
public static class ReadThread extends Thread {
private String fileName;
public ReadThread(String fileName) {
this.fileName = fileName;
}
public void run(){
FileInputStream fi = null;
try {
fi = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ArrayList<Integer> list = new ArrayList<>();
try {
while (fi.available() > 0) {
list.add(fi.read());
}
} catch (IOException e) {
e.printStackTrace();
}
Map<Integer, Integer> map = new HashMap<>();
int max = 0;
for (int i = 0; i < list.size(); i++) {
if (Collections.frequency(list, list.get(i)) > max) {
max = Collections.frequency(list, list.get(i));
}
map.put(list.get(i), Collections.frequency(list, list.get(i)));
}
Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, Integer> entry = iterator.next();
if (max == entry.getValue()) {
resultMap.put(String.valueOf(entry.getKey()),entry.getValue());
}
}
try {
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Alice Koshova
29 уровень
Объясните в чем проблема?
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Sergey MorozExpert
8 февраля 2019, 03:10решение
Нити в ходе своей параллельной работы могут в рандомном порядке писать в resultMap - в зависимости от того, какая из них захватила первой этот объект. Вследствие этого возможны и даже скорее всего будут нарушения в целостности вносимых и хранимых данных - одна не успела еще дописать свое значение, как другая уже перехватила процессорное время и втулила что-то свое.
Во избежание этого следует синхронизировать их работу, то есть защитить при помощи synchronized-блока resultMap в момент обращения к ней.
И кстати в мапу согласно условию ложится путь к файлу и искомый байт, а не искомый байт и кол-во вхождений.
+3