【Java】批量处理工具类

2023-12-19 05:51:53

目录

批量处理接口?

批量处理抽象方法

批量处理工具

批量处理接口?

public interface BatchFunction<I, O> {

    O execute(I i);

    String getFunctionName();

}

批量处理抽象方法

public abstract class AbstractBatchFunction<I, O> implements BatchFunction<I, O>{

    @Override
    public String getFunctionName(){
        return this.getClass().getName();
    }

}

批量处理工具

public class BatchUtil {

    public static <I, O> List<O> batch(List<I> inputList, final BatchFunction<I, O> batchFunction){
        return batch(inputList, batchFunction, BatchExecutorService.THREAD_POOL_EXECUTOR);
    }

    public static <I, O> List<O> batch(List<I> inputList, final BatchFunction<I, O> batchFunction, ExecutorService executorService){
        long startTime = System.currentTimeMillis();
        String functionName = batchFunction.getFunctionName();
        List<O> batchOutput = new ArrayList<>();
        List<Callable<O>> batchCallableList = new ArrayList<>();
        for(final I input : inputList){
            batchCallableList.add(new Callable<O>() {
                @Override
                public O call() throws Exception {
                    return batchFunction.execute(input);
                }
            });
        }
        try{
            List<Future<O>> futureList = executorService.invokeAll(batchCallableList, 2000, TimeUnit.MILLISECONDS);
            for(Future<O> future : futureList){
                try{
                    O o = future.get();
                    if(o == null){
                        continue;
                    }
                    batchOutput.add(o);
                }catch (Exception e){
                    //日志
                }
            }
        }catch (Exception e){
            //日志
        }
        return batchOutput;
    }

}

文章来源:https://blog.csdn.net/weixin_38838143/article/details/135074673
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。