繁体   English   中英

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

[英]How to read a file simultaneously using three threads in java?

我的程序如下:

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();
    }
}

输入:

提交编号名称工资部门编号
提交ID1名称1 25100部门1
提交ID2 Name2 25200 Dept2
提交ID3 Name3 25300 Dept3
提交ID4 Name4 25400 Dept4
提交ID5名称5 25500部门5
提交ID6 Name6 25600 Dept6
提交ID7 Name7 25700 Dept7
提交ID8 Name8 25800 Dept8
提交ID9 Name9 25900 Dept9
提交ID10 Name10 26000 Dept10

输出:

线程2 ID名称工资部门编号
线程2提交ID1名称1 25100部门1
线程2提交ID2名称2 25200部门2
线程2提交ID3名称3 25300部门3

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM