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

时间:2011-10-16 08:42:40

标签: java multithreading file-io

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

问候。

Basile Starynkevitch

答案 1 :(得分:-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);
}   
}