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

问题描述 投票:0回答:2

我想要三个线程读取单个文件,例如文件大小为 900 kb,我希望第一个线程读取文件 1kb 到 300,并且以与其他线程相同的方式执行操作(2 个线程从 301 kb 读取到 600 kb 并且3线程读取601kb到900kb)这种方法是否可以使读取速度更快输出必须显示在控制台上可能是输出混合,这对我来说并不重要主要问题是与单线程相比如何读取更快plz plz如果有人有请给我一个建议或编码

java multithreading file-io
2个回答
3
投票

我相信,如果您的目标是性能,那么您不应该费心在多个线程中读取单个兆字节文件。大部分时间可能花在实际的 IO 操作上,即从磁盘读取(回想一下,磁盘操作比内存操作慢数百万倍)。当然,在某些情况下,它可能会更快(例如,在Linux系统上,文件数据可能已经被缓存,如果它之前已经被读取或写入过一段时间)。

但是当读取(相当小的,即兆字节大小)文件时,大部分时间都花在系统上,你的编码不会影响它。

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

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


-2
投票
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);
}   
}
© www.soinside.com 2019 - 2024. All rights reserved.