我想要给多个用户(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个任务
有人能告诉我如何获取所有并发任务的反馈(而不是完成的任务数量)吗?
List<String>
而不仅仅是String
。 - Amit Deshpande