【发布时间】:2015-07-07 09:28:46
【问题描述】:
我正在运行一个程序,我在该程序中下载大文件,解析它们,然后将从文件中提取的数据写入另一个文件。
文件下载和解析需要很长时间,但写入任务平均只需一分钟左右。我的解决方案是拥有三个由三个线程组成的固定线程池。
ExecutorService downloadExecutor = Executors.newFixedThreadPool(3);
ExecutorService parseExecutor = Executors.newFixedThreadPool(3);
ExecutorService writeExecutor = Executors.newFixedThreadPool(3);
下载池中的一个线程下载文件,然后以文件名作为参数向解析器线程池提交一个新线程。这是在线程本身内完成的。然后下载线程开始从文件 URL 列表中下载另一个文件。
一旦解析器线程完成对文件中我想要的数据的解析,它就会将包含数据的新线程提交到写入线程池,然后将其写入 .csv 文件。
我的问题是是否有更优雅的解决方案。我还没有真正做过很多复杂的线程。由于我有很多文件要下载和解析,我不希望任何线程在任何时候都处于空闲状态。再次的想法是,由于解析文件可能需要一段时间,我不妨先创建单独的线程专门用于下载这些文件。
【问题讨论】:
标签: java multithreading file-io