zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    axios
    vue-cli-service 报错
    避免大型、复杂的布局和布局抖动
    vue 父子通信
    == 区别 === ,!= 区别 !==
    全选/取消全选
    vue 注意
    pyparsing:自定义一个属于你的语法解析器(更新中)
    《python解释器源码剖析》第11章--python虚拟机中的控制流
    collections:内建模块,提供额外的集合类
  • 原文地址:https://www.cnblogs.com/shajianheng/p/2802107.html
Copyright © 2011-2022 走看看