Java 使用3个线程读取单个文件

Java 使用3个线程读取单个文件,java,multithreading,file-io,Java,Multithreading,File Io,我想要三个线程读取单个文件,例如,文件大小为900 kb,我想要第一个线程读取文件1kb到300,并以相同的方式读取另一个线程(2个线程读取301 kb到600 kb,3个线程读取601kb到900kb)这种方法是否使读取速度更快必须在控制台上显示输出可能是输出混合对我来说无关紧要的主要问题是如何读取速度比单线程plz快plz给我一个建议或编码如果有人有plz我不是Java专家,但我相信如果你的目标是性能,您不应该在多个线程中读取一个MB的文件。大部分时间可能花在实际的IO操作上,即从磁盘读取数

我想要三个线程读取单个文件,例如,文件大小为900 kb,我想要第一个线程读取文件1kb到300,并以相同的方式读取另一个线程(2个线程读取301 kb到600 kb,3个线程读取601kb到900kb)这种方法是否使读取速度更快必须在控制台上显示输出可能是输出混合对我来说无关紧要的主要问题是如何读取速度比单线程plz快plz给我一个建议或编码如果有人有plz我不是Java专家,但我相信如果你的目标是性能,您不应该在多个线程中读取一个MB的文件。大部分时间可能花在实际的IO操作上,即从磁盘读取数据(回想一下,磁盘操作比内存操作慢数百万倍)。当然,在某些情况下,它可能会更快(例如,在Linux系统上,文件数据可能已经被缓存,它在一段时间之前已经被读取或写入)

public static void main(String[] args){
//
String filePath = args[0];

//Create runnable objects



//Load the file
BufferedReader br = new BufferedReader(new FileReader(filePath));
//share this object among threads you want
MyFileReader mf1 = new MyFileReader(br);
MyFileReader mf2 = new MyFileReader(br);
MyFileReader mf3 = new MyFileReader(br);

new Thread(mf1).start();
new Thread(mf2).start();
new Thread(mf3).start();
//code to detect thread ends
//close br here

}


public class MyFileReader implements Runnable{

private BufferedReader br=null;

public MyFileReader(BufferedReader br){
this.br = br
}

public void run(){
String line=null;
while((line=br.readLine())!=null){
//do your thing here e.g.
System.out.println(line);
}   
}
但是,当读取(相当小,即兆字节大小)文件时,大部分时间都花在系统中,您的编码不会影响这一点

在今天的机器上读取一个兆字节的文件应该很快。如果绝对必要,您可以使用一些肮脏的系统技巧来改进它(例如

事实上,你的问题让我很惊讶。今天读取1兆字节很快

问候


相关?你是对的。在某些特殊情况下(SSD、RAID、非常大的数据集),这可能会有所帮助,但不限于1MB,最多只需要几毫秒。当只有一个磁盘可用时,多线程读取会使事情变得更糟。磁盘本质上是一种单线程介质。这会导致灾难。你甚至不能保证每一行都正确。