java - 线程和文件写入

标签 java multithreading

我有一个使用 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/

相关文章:

java - JDK 7 类文件向后兼容 JDK 6

java - 关于 ThreadGroup#activeCount() 的困惑

java - Android 线程因未知原因停止

ios - 关于使这个线程安全但高效的建议?

c - Pthreads,尝试使用信号量从多个线程打印数字部分

java - 多线程应用中的MySql + MyBatis

java - 为什么 Collections 中的方法没有放在 AbstractCollection 中?

java - 我需要哪种 Java 对象类型(集合/列表/集合/其他)?

qt - 使用 Qt 4.5/4.6 加载 OpenGL 线程平铺纹理

java - 使用 Jackson 反序列化 JSON 时出现问题