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 }
  • 相关阅读:
    Vue官方脚手架分环境打包配置及接口环境切换
    JS超全判断终端
    H5与APP(安卓及IOS)交互方法
    json数据扁平化处理(适用于接口传参复杂数据加密处理)
    VUE实践经典记录(持续更新)
    Javascript 词法分析
    三栏自适应布局
    前端神器 Firebug 2.0 新特性一览
    事件绑定(终极版)
    正则表达式(下)
  • 原文地址:https://www.cnblogs.com/shajianheng/p/2802107.html
Copyright © 2011-2022 走看看