如果你曾经使用过p2p下载软件,他们可以下载一个带有多线程的文件,而且他们只创建了一个文件,所以我想知道线程如何将数据写入该文件.顺序还是并行?
想象一下,您想要将大型数据库表转储到文件中,以及如何更快地完成这项工作?
我试图通过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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何让所有线程将其内容写入公共文件?