0

我正在使用 executorserive 在数据库中插入记录。假设通过创建 5 个批次来保存 100 条记录,每个批次包含 20 条记录。

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();

在处理过程中,某些记录可能会出现错误,并且某些记录会成功处理。

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

任何人都可以让我知道如何实现这一目标吗?

谢谢。

4

1 回答 1

0

假设您INSERT在执行 SQL 后立即知道一条记录是否成功,您可以简单地使用两个AtomicIntegers。在运行批量插入作业之前声明它们并设置为0,并在这些作业中增加它们。s上的操作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();
            }
        }
    }
}
于 2012-12-18T22:39:22.623 回答