我有一个使用 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。)
关于互斥锁:例如,如果他们都使用相同的 FileWriter
实例(或其他),我将其称为 fw
,那么他们可以将其用作互斥锁:
synchronized (fw) {
fw.write(...);
}
如果他们每个人都使用自己的 FileWriter
或其他东西,请找到他们共享的其他东西作为互斥体。
但是,让一个线程代表其他线程执行 I/O 可能也是一个好方法。
关于java - 线程和文件写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46292447/