如何在java中使用三个线程同时读取文件?

时间:2015-02-10 11:48:47

标签: java file file-io

我的计划如下:

import java.io.*;
class MyThread implements Runnable{
    int st,en;
    LineNumberReader lmr1;
    BufferedWriter bw;
        MyThread(int s,int e){
        st=s;
        en=e;
    } 
    public void run(){

        try{

                bw=new BufferedWriter(new FileWriter("EmpWritten.txt"));
                            lmr1=new LineNumberReader(new FileReader("out3.txt"));
                String s=Thread.currentThread().getName();
                            lmr1.skip(st);
                while(st++<en){
                        bw.write(s+"\t"+lmr1.readLine());
                        bw.newLine();

                }
            lmr1.close();
            bw.close();
        }
        catch(Exception e){}

}
    public static void main(String args[])throws Exception{
        LineNumberReader lmr=new LineNumberReader(new FileReader("out3.txt"));
        lmr.skip(Long.MAX_VALUE);
        int num=lmr.getLineNumber();
        int num1=num/3,num2=2*num1;

        MyThread mt1=new MyThread(0,num1);
        MyThread mt2=new MyThread(num1+1,num2);
        MyThread mt3=new MyThread(num2+1,num);

        Thread t1=new Thread(mt1);
        Thread t2=new Thread(mt2);
        Thread t3=new Thread(mt3);

        t1.start();
        t2.start();
        t3.start(); 


        lmr.close();
    }
}

输入:

  

提交ID名称薪资部门号码提交   ID1名称1 25100部门1承诺ID2名称2 25200部门2承诺   ID3名称3 25300部门3承诺ID4名称4 25400部门4承诺   ID5 Name5 25500 Dept5
Commit ID6 Name6 25600 Dept6
Commit   ID7名称7 25700部门7承诺ID8名称8 25800部门8承诺   ID9 Name9 25900 Dept9
承诺ID10名称10 26000 Dept10

输出:

  

Thread-2 ID Name Salary Department Number
Thread-2 Commit   ID1 Name1 25100 Dept1
Thread-2 Commit ID2 Name2 25200 Dept2
  Thread-2 Commit ID3 Name3 25300 Dept3

为什么不执行其他线程?需要做哪些修改才能获得所需的输出?该程序的高效实现也是受欢迎的。

1 个答案:

答案 0 :(得分:0)

三个线程工作。 在run方法中添加一些日志后,您可以看到它。 我不确定你到底想要什么。 但我认为你需要生产者 - 消费者设计模式。