入力ディレクトリから多数のファイルに格納されたデータを処理し、そのデータに応じて出力を生成するアプリケーションがあります。
これまでのところ、アプリケーションはシーケンシャルに動作します。つまり、「マネージャー」スレッドを起動します。
- 入力ディレクトリの内容を
File[]
配列に読み込みます - 各ファイルを順番に処理し、結果を保存します
- すべてのファイルが処理されると終了します
これをマルチスレッド アプリケーションに変換したいと思います。このアプリケーションでは、「マネージャー」スレッドが
- 入力ディレクトリの内容を
File[]
配列に読み込みます - それぞれが単一のファイルを処理し、結果を保存し、そのファイルの要約レポートを「マネージャー」スレッドに返します。
- すべてのファイルが処理されると終了します
「プロセッサ」スレッドの数は、ThreadPoolExecutor
.
join()
orの使用を回避するソリューションwait()/notify()
が望ましいでしょう。
上記のシナリオに基づいて:
- これらの「プロセッサ」スレッドが「マネージャ」スレッドに報告する最良の方法は何でしょうか? ここに基づく実装は意味がありますか
Callable
?Future
- 「マネージャ」スレッドは、すべての「プロセッサ」スレッドが終了したとき、つまりすべてのファイルが処理されたときをどのように知ることができますか?
- プロセッサ スレッドを「タイミング」し、「時間がかかりすぎる」場合 (つまり、事前に構成された時間が経過しても結果が返されない場合) に終了する方法はありますか?
(疑似)ソースコードへのポインタまたは例を教えていただければ幸いです。