多线程写多个文件,但它会相互影响

时间:2018-06-04 07:52:37

标签: 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));
    }
}
}

1 个答案:

答案 0 :(得分:0)

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

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

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