栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用线程池/线程读取大型txt文件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用线程池/线程读取大型txt文件?

好吧,请允许我,因为我需要解释一些事情。

首先,除非您有多个磁盘或一个SSD磁盘,否则建议不要使用多个线程来读取磁盘。关于此主题的许多问题已经发布,结论是相同的:使用多个线程从单个机械磁盘读取将损害性能而不是提高性能。

发生上述情况是因为磁盘的机械头需要继续寻找下一个读取位置。使用多个线程意味着当每个线程都有机会运行时,它将把磁头定向到磁盘的不同部分,从而使磁头在磁盘区域之间的反射效率很低。

处理多个文件的公认解决方案是具有一个生产者(阅读器线程)-多个使用者(处理线程)系统。在这种情况下,理想的机制是线程池,其中线程充当生产者并将任务放入池队列中,以供工人处理。

像这样:

int numFiles = 20;int threads = 4;ExecutorService exec = Executors.newFixedThreadPool(threads);for(int i = 0; i < numFiles; i++){    String[] fileContents = // read current file;    exec.submit(new ThreadTask(fileContents));}exec.shutdown();exec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);...class ThreadTask implements Runnable {   private String[] fileContents;   public ThreadTask(String[] fileContents) {        this.fileContents = fileContents;   }   public void run(){      //processes txt file   }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号