Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Process Java executor服务如何同时返回总成功和总失败记录_Process_Batch File_Executorservice - Fatal编程技术网

Process Java executor服务如何同时返回总成功和总失败记录

Process Java executor服务如何同时返回总成功和总失败记录,process,batch-file,executorservice,Process,Batch File,Executorservice,我正在使用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)

我正在使用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();
ExecutorService e=Executors.newFixedThreadPool(3);
集合c=新的ArrayList();
while(someloop)
{
c、 添加(mysavemethod());
}
列表=e.invokeAll(c);
迭代器i=list.Iterator();
未来f=null;
while(i.hasNext())
{
f=itr.next();
}
Strin str=f.get();
处理时,某些记录可能出错,某些记录将成功处理

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

有人能告诉我如何才能做到这一点吗


谢谢。

假设您知道在执行SQL之后是否立即成功插入了记录,您只需使用两个
AtomicInteger
s即可。在运行批插入作业之前,先声明它们并将其设置为
0
,然后在这些作业中递增它们。原子整数上的操作是线程安全的,因此不需要担心同步问题。例如:

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();
            }
        }
    }
}
publicstaticvoidmain(){
AtomicInteger NSACCESS=新的AtomicInteger(0);
AtomicInteger nFailed=新的AtomicInteger(0);
//添加批插入作业
//等待作业完成
System.out.println(“成功:+nsucess.get()+”失败:+nFailed.get());
}
类BatchInserter实现Runnable{
公开募捐{
对于(int i=0;i<20;i++){
如果(插入记录(i)){
nsAccess.getAndIncrement();
}否则{
nFailed.getAndIncrement();
}
}
}
}