.csv ファイルから項目を読み取り、それらをリモート データベースに書き込むプログラムを扱っています。プログラムをマルチスレッド化しようとしています。そのために、個別の接続を持つ 2 つのプロセス スレッドを作成しました。この目的のために、.csv ファイルがバッファリングされたリーダーに読み込まれ、バッファリングされたリーダーの内容が処理されます。ただし、スレッドはデータを複製し続けているようです (すべてのタプルの 2 つのコピーをデータベースに書き込みます)。
Java でバッファをミューテックスする方法を見つけようとしてきましたが、思いつく最も近いものはプライオリティ キューです。
私の質問は、バッファ付きリーダーを使用して、ファイルを優先キューに 1 行ずつ読み込むことができるかということです。IE
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 ファイルの読み取りにバッファー リーダーが使用されていることがわかります。バッファリングされたリーダーがタプルを優先キューに入れ、各プログラムスレッドが優先キューにアクセスするように、関数の外部で優先キューを設定する方法はありますか?