Java多線程讀文件比單線程提高效率的實例


假設有兩個文本文件Arrays-1.txt和Arrays-2.txt,內容格式如下:

1

2

3

4

.

.

.

用單線程分別讀這兩個文件並求和,花費時間time1;用兩個線程同時讀這兩個文件並求和,花費時間time2;結果顯示:time1>time2,因此說明多線程可以提高效率.測試計算機配置:雙核Intel Core i3 cpu550,4G RAM

View Code
 1 import java.io.*;
 2 public class ThreadsSum6{
 3     public static void main(String[] args) throws IOException {
 4        String str;
 5        long sum1=0;
 6        long start = System.currentTimeMillis();
 7        FileReader fr=new FileReader("arrays-1.txt");
 8        //建立文件輸入流
 9        BufferedReader br=new BufferedReader(fr);
10        //建立緩沖輸入流
11 
12        while ((str=br.readLine())!=null) {
13              sum1+=Integer.parseInt(str);
14        }
15        fr=new FileReader("arrays-2.txt");
16        br=new BufferedReader(fr);
17        while ((str=br.readLine())!=null) {
18              sum1+=Integer.parseInt(str);
19        }
20        fr.close();
21        long end = System.currentTimeMillis();
22        System.out.println("sum1="+sum1);
23        System.out.println("time1="+(end - start));
24 
25        start = System.currentTimeMillis();
26        ReadFileThread th1=new ReadFileThread("arrays-1.txt");
27        ReadFileThread th2=new ReadFileThread("arrays-2.txt");
28        th1.start();
29        th2.start();
30        try{//等待線程結束
31         th1.join();
32         th2.join();
33        }catch(Exception e){}
34        long sum2=th1.getSum()+th2.getSum();
35        end = System.currentTimeMillis();
36 
37        System.out.println("sum2="+sum2);
38        System.out.println("time2="+(end - start));
39    }
40 }
41 class ReadFileThread extends Thread{
42     long sum=0;
43     FileReader fr;
44     BufferedReader br;
45     String str;
46     public ReadFileThread(String fileName){
47         try{
48             fr=new FileReader(fileName);
49             //建立文件輸入流
50             br=new BufferedReader(fr);
51             //建立緩沖輸入流
52         }
53         catch(Exception e){System.out.println("error1");}
54     }
55     public void run(){
56         try{
57              while((str=br.readLine())!=null) {
58                 sum+=Integer.parseInt(str);
59              }
60              fr.close();                
61         }
62         catch(Exception e){System.out.println("error2");}
63     }
64     long getSum(){
65         return sum;
66     }
67 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM