我對ExecutorService不熟悉,但不確定我的方法。 我可以爲一個已知的任務處理多達100個線程。 我使用下面的一般格式,在那裏創建FutureTasks列表,然後將它們提交給ExecutorService。 ExecutorService返回並將這些掛起的結果添加到另一個列表。 然後我遍歷這個列表,每個掛起的結果調用get()。如何有效處理來自Executor服務的多個結果
我的查詢是:將不會在每個get()上的這個塊,直到所有100個線程完成?有一個更好的方法嗎 ?
我是否正確地認爲get()返回Callable實現的call()方法的結果?我正在使用默認的FutureTask類,並沒有將其子類化。
ExecutorService exec = Executors.newFixedThreadPool(NUM_THREADS);
List<JobClass> originalList = new ArrayList<JobClass>();
List<SomeOtherClass> pendingResult = new ArrayList<SomeOtherClass>();
List<Future<SomeOtherClass>> resultList = new ArrayList<Future<SomeOtherClass>>();
for(JobClass sc : originalList)
pendingResult.add(submit(sc);
for(Future<SomeOtherClass> future : futures)
resultList.add(future.get(5, TimeUnit.SECONDS));
如果您需要示例代碼,請讓我知道。 –
感謝doc_180,在你的提示和看看這個[link](http://blog.teamlazerbeez.com/2009/04/29/java-completionservice/)之間,問題解決了。 –