2012-07-19 111 views
0

我使用executorserive在数据库中插入记录。可以说,通过创建5个批次来保存100条记录,每个记录包含20条记录。Java执行器服务如何一次返回总成功和总失败记录

ExecutorService e = Executors.newFixedThreadPool(3); 
Collection c= new ArrayList(); 
while (someloop) 
{ 
    c.add(mySaveMehtod()); 
} 
List<Future<String>> list = e.invokeAll(c); 
Iterator<Future<String>> i= list.iterator(); 
Future<String> f=null; 
while(i.hasNext()) 
{ 
    f= itr.next();  
} 
Strin str = f.get(); 

在处理过程中,某些记录可能有错误,某些记录会成功处理。

一旦过程完成,我想一次收集成功处理的总数和总失败的记录。

任何人都可以让我知道我可以做到这一点吗?

谢谢。

回答

0

假设您知道记录的INSERT在执行SQL后立即成功,您可以简单地使用两个AtomicInteger。在运行批量插入作业之前,先声明它们并设置为0,然后在这些作业中增加它们。在AtomicInteger上的操作是线程安全的,所以你不必担心同步。例如:

public static void main() { 
    AtomicInteger nSuccess = new AtomicInteger(0); 
    AtomicInteger nFailed = new AtomicInteger(0); 
    // add batch insert jobs 
    // wait for jobs to finish 
    System.out.println("succeeded: " + nSuccess.get() + " failed: " + nFailed.get()); 
} 

class BatchInserter implements Runnable { 
    public void run() { 
     for (int i = 0; i < 20; i++) { 
      if (insertRecord(i)) { 
       nSuccess.getAndIncrement(); 
      } else { 
       nFailed.getAndIncrement(); 
      } 
     } 
    } 
} 
相关问题