• 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 }
  • 相关阅读:
    sell -- js, 字符串去重,找到字符串中出现最多次数的字符,且输出多少次
    网络连接不了!
    sell -- js过滤敏感词
    动态绑定HTML
    web前端学习之HTML CSS/javascript之一
    web前端性能优化
    浅谈大型web系统架构
    应用越来越广泛的css伪类
    css3火焰文字样式代码
    7种html5css3网页图片展示特效代码
  • 原文地址:https://www.cnblogs.com/shajianheng/p/2802107.html
Copyright © 2020-2023  润新知