我有一个使用 20 个线程的 java 程序。他们每个人都将他们的结果写在一个名为 output.txt
的文件中。
我总是在 output.txt
中得到不同数量的行。
会不会是线程同步的问题?有办法处理吗?
最佳答案
can it be a problem of synchronization of threads?
是的。
There's a way to handle this?
是的,通过在相关互斥体上同步确保写入被序列化。或者,只有 一个 线程实际输出到文件,并让所有其他线程简单地将要写入的文本排队到一个写入线程从中提取的队列中。 (这样 20 个主线程就不会阻塞 I/O。)
关于互斥量:例如,if 它们都使用相同的 FileWriter
实例(或其他),我将其称为 fw
,然后他们可以将它用作互斥量:
synchronized (fw) {
fw.write(...);
}
如果他们每个人都使用自己的 FileWriter
或其他任何东西,请找到他们共享的其他东西作为互斥体。
但同样,让一个线程代表其他线程执行 I/O 可能也是一个不错的方法。
关于java - 线程和文件写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9972549/