我想向多个(500,1000,2000)个用户发送电子邮件。
我已经使用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 个任务。
但我想要输出为没有失败的电子邮件和成功发送的电子邮件的数量。
例如,如果有 500 个电子邮件用户,如果有 20 个失败,那么输出应该是 480 成功和 20 失败。
但是使用上面的代码,我只得到没有任务。即5个任务
谁能告诉我如何从所有并发任务中获得反馈(不是完成的任务数量)。