多线程读取文件

上传人:飞*** 文档编号:43352516 上传时间:2018-06-05 格式:DOC 页数:8 大小:33KB
返回 下载 相关 举报
多线程读取文件_第1页
第1页 / 共8页
多线程读取文件_第2页
第2页 / 共8页
多线程读取文件_第3页
第3页 / 共8页
多线程读取文件_第4页
第4页 / 共8页
多线程读取文件_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《多线程读取文件》由会员分享,可在线阅读,更多相关《多线程读取文件(8页珍藏版)》请在金锄头文库上搜索。

1、多线程读取文件多线程读取文件 Java 多线程文件读取单线程读取 10K 个 文件的话会显的非常的慢,但是如果我们开启多个线程去读 取,会让读取的速度大大的加快,顺便说一下多线程的注意事项: synchronized 代码快中 尽量简短,不要有 类似 socket.accept() inputstream.read() 这样的阻塞式的方法,这样会让程序减慢,如果 synchronized 代码快中的东西太多,容易造成单线程的囧地,而且速度还不如 单线程快。废话少说,我们来看看代码:-1.生成 10K 个 文件:package com.fileThread;import java.io.File

2、; import java.io.FileOutputStream; import java.io.OutputStream;public class GenFile /* param args* throws Exception*/public static void main(String args) throws Exception File file = null;OutputStream out = null;file = new File(“c:/file“);if(!file.exists()file.mkdirs();for (int i = 0; i 0) sum += In

3、teger.parseInt(s);file = null;sb = null;is = null;System.out.println(this.sum);System.out.println(System.currentTimeMillis() - time);public Integer getI() return i;public void setI(Integer i) this.i = i;public Integer getSum() return sum;public void setSum(Integer sum) this.sum = sum; -所有的东西 都放到 syn

4、chronazied 代码快中的速 度比较,这个类似单线程package com.fileThread;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;public class ReadFileAll public static void main(String args) throws Exception Sums sum = new Sums();T

5、hread t1 = new Thread(sum);Thread t2 = new Thread(sum);Thread t3 = new Thread(sum);t1.start();t2.start();t3.start();/ 22562/ 14625 class Sums implements Runnable private Integer i = 0;private Integer sum = 0;static long time;public void run() File file = null;InputStream is = null;StringBuffer sb =

6、null;while (true) if (i = 0) time = System.currentTimeMillis();if (i = 10000) break;synchronized (this) file = new File(“c:/file/file“ + i + “.txt“); / System.out.println(i + “currentThread=“ / + Thread.currentThread().getName();i+;try is = new FileInputStream(file); catch (FileNotFoundException e)

7、byte data = new byte2048;int len = 0;sb = new StringBuffer();try while (len = is.read(data) != -1) sb.append(new String(data, 0, len); catch (IOException e) String result = sb.toString();String arr = result.split(“D+“);for (String s : arr) if (s != null file = null;sb = null;is = null;System.out.pri

8、ntln(this.sum);System.out.println(System.currentTimeMillis() - time);public Integer getI() return i;public void setI(Integer i) this.i = i;public Integer getSum() return sum;public void setSum(Integer sum) this.sum = sum;-单线程去读的速度:package com.fileThread;import java.io.File; import java.io.FileInputS

9、tream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;public class ReadFileSingleThread public static void main(String args) throws Exception int i = 0;long time = 0;int sum =0;File file = null;InputStream is = null;StringBuffer sb = null;while (true) if

10、 (i = 0) time = System.currentTimeMillis();if (i = 10000) break;file = new File(“c:/file/file“ + i + “.txt“);i+;try is = new FileInputStream(file); catch (FileNotFoundException e) byte data = new byte2048;int len = 0;sb = new StringBuffer();try while (len = is.read(data) != -1) sb.append(new String(

11、data, 0, len); catch (IOException e) String result = sb.toString();String arr = result.split(“D+“);for (String s : arr) if (s != null file = null;sb = null;is = null;System.out.println(sum);System.out.println(System.currentTimeMillis() - time); -通过比较,大家就可以发现多线程的好处了,可能大家多如何写多线程存在疑 问,这里我想说的是多想想,你的多线程是想做什么,就像 这个 例子,我的 多线程 就是想 每个人线程分担 不同的文件读取,再算总和,所以我要控制的 同步资源就是文件的名称和总和,所以我就需要把这两个 属性 同步上,这样 就可以。如何返回多线程执行完的结果呢,我个人认为这样做,是让其他线程在 mian 之前完成,这样就可以达到效果,可以用 thread.join()方法,这样在 执行 mian 之前就会先把多线程执行完,就可以的到结果。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号