.csv 파일에서 항목을 읽고 원격 데이터베이스에 기록하는 프로그램을 다루고 있습니다. 나는 프로그램을 멀티 쓰레딩하려고 노력하고있다. 그리고 그 목적을 위해 나는 별개의 연결을 가진 2 개의 프로세스 쓰레드를 만들었다. 이를 위해 .csv 파일을 버퍼링 된 판독기로 읽어 들이고 버퍼링 된 판독기의 내용을 처리합니다. 그러나 스레드가 데이터를 복제하는 것으로 보입니다 (모든 튜플의 복사본 두 개를 데이터베이스에 쓰는 것).버퍼링 된 리더와 우선 순위 큐가 함께 작동합니까?
저는 Java에서 버퍼를 뮤텍스하는 방법을 알아 내려고 노력해 왔습니다. 가장 가까운 것은 우선 순위 큐입니다.
제 질문은 버퍼링 된 리더를 사용하여 파일을 줄 단위로 우선 순위 대기열로 읽을 수 있습니까? I.E.
public void readFile(Connection connection) {
BufferedReader bufReader = null;
try{
bufReader = new BufferedReader(new FileReader(RECS_FILE));
bufReader.readLine(); //skip header line
String line;
while((line = bufReader.readLine()) != null) {
//extract fields from each line of the RECS_FILE
Pattern pattern = Pattern.compile("\"([^\"]+)\",\"([^\"]+)\",\"([^\"]+)\",\"([^\"]+)\"");
Matcher matcher = pattern.matcher(line);
if(!matcher.matches()) {
System.err.println("Unexpected line in "+RECS_FILE+": \""+line+"\"");
continue;
}
String stockSymbol = matcher.group(1);
String recDateStr = matcher.group(2);
String direction = matcher.group(3);
String completeUrl = matcher.group(4);
//create recommendation object to populate required fields
// and insert it into the database
System.out.println("Inserting to DB!");
Recommendation rec = new Recommendation(stockSymbol, recDate, direction, completeUrl);
rec.insertToDb(connection);
}
} catch (IOException e) {
System.err.println("Unable to read "+RECS_FILE);
e.printStackTrace();
} finally {
if(bufReader != null) {
try{
bufReader.close();
} catch (IOException e) {
}
}
}
}
.csv 파일을 읽는 데 버퍼링 된 리더가 사용됩니다. 함수 외부에서 우선 순위 큐를 설정하여 버퍼링 된 판독기가 우선 순위 큐에 튜플을 넣고 각 프로그램 스레드가 우선 순위 큐에 액세스하도록하는 방법이 있습니까?