线程和文件写入

Raz*_*rMx 16 java multithreading

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

我总是得到不同数量的线output.txt.

这可能是线程同步的问题吗?有办法处理这个吗?

T.J*_*der 32

这可能是线程同步的问题吗?

是.

有办法解决这个问题吗?

是的,确保通过在相关互斥锁上同步来序列化写入.或者,只有一个实际输出到该文件的线程,并且所有其他线程只是将队列文本排队写入一个写入线程所从的队列.(这样,20个主线程不会阻塞I/O.)

重新使用互斥锁:例如,如果它们都使用相同的FileWriter实例(或其他),我将其称为fw,那么它们可以将它用作互斥锁:

synchronized (fw) {
    fw.write(...);
}
Run Code Online (Sandbox Code Playgroud)

如果他们每个人都使用他们自己FileWriter或其他什么,找到他们共享的其他东西作为互斥体.

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


Ale*_*aev 10

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

  • +1 我只是在你写你的答案时把这个建议添加到我的答案中。:-) (2认同)