线程和文件写入
2022-09-02 23:12:30
我有一个使用20个线程的java程序。他们每个人都将结果写在一个名为.output.txt
我总是在 中得到不同数量的行。output.txt
线程同步会是问题吗?有没有办法解决这个问题?
我有一个使用20个线程的java程序。他们每个人都将结果写在一个名为.output.txt
我总是在 中得到不同数量的行。output.txt
线程同步会是问题吗?有没有办法解决这个问题?
会不会是线程同步的问题?
是的。
有办法解决这个问题吗?
是的,请确保通过在相关互斥体上进行同步来序列化写入。或者,只有一个实际输出到文件的线程,并且让所有其他线程只是将文本排队,以写入一个写入线程从中绘制的队列中。(这样,20 个主线程就不会在 I/O 上阻塞。
Re the mutex:例如,如果它们都使用相同的实例(或其他),我将称之为 ,那么他们可以将其用作互斥体:FileWriter
fw
synchronized (fw) {
fw.write(...);
}
如果他们每个人都使用自己的或别的什么,那就找一些他们共同的东西来成为互斥体。FileWriter
但同样,让一个线程代表其他人执行 I/O 可能也是一个好方法。
我建议你以这种方式组织它:一个线程使用者将使用所有数据并将其写入文件。所有工作线程都将以同步方式向使用者线程生成数据。或者,对于多线程文件写入,您可以使用一些互斥体或锁实现。