我有一个应用程序,它处理存储在输入目录中的多个文件中的数据,然后根据该数据生成一些输出。
到目前为止,应用程序是按顺序工作的,即它启动一个“管理器”线程,
- 将输入目录的内容读入
File[]
数组 - 按顺序处理每个文件并存储结果
- 处理完所有文件后终止
我想将其转换为多线程应用程序,其中“管理器”线程
- 将输入目录的内容读入
File[]
数组 - 启动多个“处理器”线程,每个线程处理单个文件、存储结果并将该文件的摘要报告返回给“管理器”线程
- 处理完所有文件后终止
“处理器”线程的数量最多等于文件的数量,因为它们将通过ThreadPoolExecutor
.
任何避免使用join()
or的解决方案wait()/notify()
都是可取的。
基于以上场景:
- 让那些“处理器”线程向“管理器”线程报告的最佳方式是什么?一个基于这里的实现
Callable
是否Future
有意义? - “管理器”线程如何知道所有“处理器”线程何时完成,即所有文件何时处理完毕?
- 有没有办法“定时”处理器线程并在它“太长”时终止它(即,尽管经过了预先配置的时间量,它还没有返回结果)?
任何指向(伪)源代码的指针或示例将不胜感激。