我想向多個(500,1000,2000)用戶發送電子郵件。Java ExecutorService獲取所有任務的反饋
我已經做到了用ExecutorService
。
但現在我想收集發送成功的電子郵件的數量和失敗的郵件的出總記錄數。
我已經實現了這個名字:
int startValue=0;
int endValue=0;
List userEmailList = getListFromDB();
ExecutorService e = Executors.newFixedThreadPool(10);
Collection c = new ArrayList();
while (someflag)
{
// in MyTask class I am sending email to users.
c.add(new MyTask(startValue, endValue,userEmailList));
}
e.invokeAll(c); //Here I am calling invokeall .
pool.shutdown();
public class MyTask implements Callable<String> {
MyTask(startValue, endValue,userEmailList){
}
public String call(){
//e.g. batch 1 will have - startValue => endValue = 0 -100
//e.g. batch 2 will have - startValue => endValue = 101 -199
//e.g. batch 3 will have - startValue => endValue = 200 -299
//e.g. batch 4 will have - startValue => endValue = 300 -399
//e.g. batch 5 will have - startValue => endValue = 400 - 499
for(int i=startValue;i<endValue;i++){
sendEmailToUser(userEmailList.get(i)){
}
}
}
但那麼Future.get()返回我的任務完成的數量。所以從上面的代碼它會返回我5任務。
但我想輸出沒有失敗的電子郵件和成功的電子郵件的號碼發送的。
爲e.g如果有500個電子郵件用戶,如果20 falied,那麼輸出應該是480的成功與失敗20。
但隨着上面的代碼,我只得到沒有任務的。即5任務
任何人都可以告訴我如何從所有併發任務中獲得反饋(不是已完成任務的數量)。
您可以發佈完整的代碼片段。我認爲你需要返回類型爲'List'而不是'String' –