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。)

关于互斥量:例如,if 它们都使用相同的 FileWriter 实例(或其他),我将其称为 fw ,然后他们可以将它用作互斥量:

synchronized (fw) {
    fw.write(...);
}

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

但同样,让一个线程代表其他线程执行 I/O 可能也是一个不错的方法。

关于java - 线程和文件写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9972549/

相关文章:

java - 以一定的时间间隔更新 DrawString

java - 如何强制 log4j 从非 src 文件夹加载 xml 配置?

android - 处理程序无法向主线程传递消息或 Runnable

c++ - 读取传感器数据的线程或定时器?

java - 方法超时

multithreading - 单线程能做多线程能做的一切吗?

java - jsp:param 与 Java 类

java - Handlebars if 方法返回 null/空字符串

java - 如何在生成的 Cell 的 UiBinder 中使用 CssResources?

android - 由于只有 1 个 UI 线程 - 那么所有事件监听器都是程序化的吗?