java - 多个线程可以同时将数据写入文件吗?

标签 java multithreading file-io concurrency

如果你曾经使用过p2p下载软件,他们可以通过多线程下载一个文件,而且他们只创建一个文件,所以我想知道线程是如何将数据写入那个文件的。顺序还是并行?

想象一下你想将一个大的数据库表转储到一个文件中,如何让这个工作更快?

最佳答案

您可以使用多个线程将 a 写入文件,例如一个日志文件。但是你必须像@Thilo 指出的那样协调你的线程。您需要同步文件访问并且只写入整个记录/行,或者您需要制定将文件区域分配给不同线程的策略,例如重新构建一个已知偏移量和大小的文件。

出于性能原因,很少这样做,因为大多数磁盘子系统在顺序写入时性能最佳,而磁盘 IO 是瓶颈。如果 CPU 创建记录或文本行(或网络 IO)是瓶颈,它可以提供帮助。

Image that you want to dump a big database table to a file, and how to make this job faster?

按顺序写可能是最快的。

关于java - 多个线程可以同时将数据写入文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602466/

相关文章:

python - 什么是 Python 的良好临时存储和传输格式?

java - Junit - 比较两个 XML 文档是否相同

java - Java中如何将两个文件夹文件合并为一个

java - 在运行时加载 jar

c++ - Visual Studio13 创建线程和优化流程

c - 在 C 中没有锁的线程之间共享 bool 值

c# - 精确测量线程中代码的执行时间(C#)

matlab - 嵌套文本扫描语句

java - 谁能告诉我为什么我的旧列表包含所有应该只存在于新列表中的值。?

java - 来自 lambda 的方法引用