我有一個應用程序可以處理來自輸入目錄的多個文件中存儲的數據,然後根據該數據生成一些輸出。多線程文件處理和報告
到目前爲止,應用程序的工作原理在連續的基礎上,也就是說,它會啓動一個「經理」線程
- 讀取輸入目錄的內容爲
File[]
陣列 - 流程序列中的每個文件,結果存儲
- 終止時,所有文件都處理
我想這個轉換爲多線程應用程序,在其中的「人時效器」線程
- 讀取輸入目錄的內容到一個
File[]
陣列 - 推出了一些‘處理器’線程,每個線程的處理的單個文件中,存儲結果,並返回該文件的摘要報告以「經理」線程時所有文件都被處理
的「處理器」的線程數是最多等於文件的數量,因爲它們會通過ThreadPoolExecutor
回收
任何避免使用join()
或wait()/notify()
的解決方案都是可取的。基於上述情況
:
- 什麼是那些具有「處理器」主題報告給「經理」線程的最佳方式?基於
Callable
和Future
的實現是否有意義? - 「經理」線程如何知道所有「處理器」線程何時完成,即何時處理完所有文件?
- 如果處理器線程需要「太長時間」(即,儘管經過了預先配置的時間量,它還沒有返回結果),是否有一種「計時」處理器線程並終止它的方法?
任何指針或(僞)源代碼的例子將不勝感激。
我不是線程專家,但這裏是我的快速拍攝給你一個方向: 1.您可以使用等待/通知機制來控制報告行爲。 2.主管理器線程可以在讀取文件時處理數據。它是否需要等到所有文件都處理完畢? 3.有TimerTask,可以在你的情況下得心應手。 – Sid 2012-07-24 21:45:20
感謝您的快速回答。管理器線程不需要等待所有處理器線程完成,但它確實需要知道它們何時完成。我寧願不使用wait()/ notify(),因此引用了Callable接口。無論如何,請將您的評論置於答案中,以便我可以投票。 :-) – PNS 2012-07-24 21:52:08
您是否需要同步訪問公共資源?就像一個文件或緩存你收集你的結果? – Mithon 2012-07-24 21:57:33