簡體   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