Я немного запутался в поведении каждой «задачи», которую я хочу выполнить, с моим пулом потоков. У меня есть задание для чтения данных из CSV-файла (строка за строкой), и мне нужно сделать это в многопоточном образом, чтобы можно увидеть ниже реализации до сих пор:Confused Java Threadpool и синхронные методы
public class CSVParser implements Runnable
{
private String m_csvFilePath = "C:/Users/Gabi/Desktop/HttpTrafficProject/CSVfile.csv";
private BufferedReader m_bReader = null;
private String m_Line = "";
private String m_CSVSplitBy = ",";
private String m_SrcIP = "";
private String m_Host = "";
private String m_Request = "";
private String m_UserAgent = "";
@Override
public synchronized void run()
{
try
{
m_bReader = new BufferedReader(new FileReader(this.m_csvFilePath));
while((m_Line = m_bReader.readLine()) != null)
{
String[] str = m_Line.split(m_CSVSplitBy);
m_SrcIP = str[0];
m_Host = str[1];
m_Request = str[2];
m_UserAgent = str[3];
System.out.println(this.m_SrcIP +" " + this.m_Host);
}
System.out.println("Done");
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public class Main
{
public static void main(String[] args) throws InterruptedException
{
Runnable parser = new CSVParser();
ExecutorService executor = Executors.newFixedThreadPool(3);
for(int i = 0 ; i < 5 ; i++)
{
executor.execute(parser);
}
}
}
Как я понял, исполнитель по к моему коду, у меня будет всегда 3 рабочих потока, каждый из которых выполнит 5 задач (исправьте меня, если я ошибаюсь).
Мой вопрос:
каждый поток, который считывает данные из CSV-файла будет считывать все данные, и только после окончания делать это другой поток начнет считывать данные из CSV?
Каждый поток синхронизируется на себя. –
Ваш вопрос немного неясен. Что вы ожидали, что произойдет, чего вы не ожидаете? Ваши потоки не собираются работать вместе из-за вашей синхронизации, но я не уверен, что об этом вы спрашиваете. – RealSkeptic
Каждый поток делает что-то, читая из файла csv, и после того, как один поток заканчивает его, другой поток продолжает оставаться частью. Это все, что вы можете сделать, выбирая подходящего исполнителя. –