java - 多线程写入多个文件,但是会互相影响

标签 java multithreading io

当我运行单个线程写入文件时,大约需要 400 毫秒,但是我运行三个或更多线程,每个线程写入一个文件,大约需要 1000 毫秒,所有这些线程都变慢,这是怎么发生的?

这是我的代码

package practice.feature.java.core.thread;

import java.io.File;
import java.io.FileWriter;

public class MainEnter {

public static void main(String[] args) {
    for (int i = 0; i < 1; i++) {
        WriteFile file1 = new WriteFile("WriteFile" + i + ".txt");
        new Thread(file1).start();
    }
}

static class WriteFile implements Runnable {
    private String name;

    public WriteFile(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        Long now = System.currentTimeMillis();
        File file = new File(name);
        try {
            file.createNewFile();
            FileWriter versionWriter = new FileWriter(file, true);
            for (long i = 0; i < 1000000L; i++) {
                versionWriter.write(name + "****" + i);
                versionWriter.write(System.getProperty("line.separator"));

            }
            versionWriter.flush();
            versionWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Long newnow1 = System.currentTimeMillis();
        System.out.println(name + "导出时间:" + (newnow1 - now));
    }
}
}

最佳答案

当您关闭文件时,操作系统会将其刷新到磁盘。我怀疑您的 HDD 通常限制在 40 MB/s 左右。一次写入更多文件可以让您更接近磁盘的最大带宽,但您看不到显着的改进。

注意:SSD 速度更快,但典型驱动器的速度仍限制在 500 MB/s 左右

简而言之,添加更多线程并不会加快磁盘驱动器的速度。

关于java - 多线程写入多个文件,但是会互相影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675770/

相关文章:

java - 如何将配置作为 bean 访问?

c - 检索 C 中两次迭代之间花费的时间

C++ 可运行类

java - 同步线程执行

ruby - `File` 对象的访问模式之间的差异(即 w+、r+)

Java - 查找最多连接数的算法

java - 泛型通配符参数下界到对象

java - 如何使用(正则表达式)删除java中的重复字母并且不区分大小写

检查 stdin 是否有待处理的字节(用于转义序列)

c++ - 为什么我的C++程序只能读取绝对目录而不能读取同一文件夹中的文件?