複数 (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 件の失敗になります。
しかし、上記のコードでは、 no of task しか得られません。すなわち5タスク
すべての同時タスクからフィードバックを得る方法を誰か教えてもらえますか (完了したタスクの数ではありません)。