Java の複数のスレッドを介して、コンテンツをファイルに書き込もうとしています。各スレッドは異なる入力ファイルを読み取り、いくつかの計算を行い、いくつかの (異なる) コンテンツを共通の出力ファイルに書き込みます。問題は、最終的に、出力ファイルには、最後に終了したスレッドによって書き込まれたコンテンツのみが含まれ、他のスレッドからのコンテンツは含まれないことです。スレッドに関連するコード -
public void run()
{
try
{
File file = new File("/home/output.txt");
if (!file.exists())
{
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
BufferedReader br = new BufferedReader(new FileReader(inputfile)); // each thread reads a different input file
String line="";
while((line=br.readLine())!=null)
{
String id = line.trim(); // fetch id
StringBuffer sb = processId(userId); // process id
synchronized(this){
bw.write(sb.toString() + "\n"); // write to file
}
}
bw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
すべてのスレッドがコンテンツを共通ファイルに書き込むようにするにはどうすればよいですか?