线程和文件写入

2022-09-02 23:12:30

我有一个使用20个线程的java程序。他们每个人都将结果写在一个名为.output.txt

我总是在 中得到不同数量的行。output.txt

线程同步会是问题吗?有没有办法解决这个问题?


答案 1

会不会是线程同步的问题?

是的。

有办法解决这个问题吗?

是的,请确保通过在相关互斥体上进行同步来序列化写入。或者,只有一个实际输出到文件的线程,并且让所有其他线程只是将文本排队,以写入一个写入线程从中绘制的队列中。(这样,20 个主线程就不会在 I/O 上阻塞。

Re the mutex:例如,如果它们都使用相同的实例(或其他),我将称之为 ,那么他们可以将其用作互斥体:FileWriterfw

synchronized (fw) {
    fw.write(...);
}

如果他们每个人都使用自己的或别的什么,那就找一些他们共同的东西来成为互斥体。FileWriter

但同样,让一个线程代表其他人执行 I/O 可能也是一个好方法。


答案 2

我建议你以这种方式组织它:一个线程使用者将使用所有数据并将其写入文件。所有工作线程都将以同步方式向使用者线程生成数据。或者,对于多线程文件写入,您可以使用一些互斥体或锁实现。