invorkAll() 异步批量处理数据
- 使用场景:批量数据、线程池处理。
- 代码示例
public static void asyncExecute(List<Integer> data){
List<List<Integer>> partition= Lists.partition(data,100);
List<Callable<String>> callables = new ArrayList<>();
partition.forEach(list ->{
callables.add(()->{
doWork(list); // 逻辑处理方法
return "" + list.size();
}
);
});
ThreadPoolExecutor pool = new ThreadPoolExecutor(THREAD,THREAD,30, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(THREAD * 2));
List<Future<String>> futures = null;
try {
futures = pool.invokeAll(callables);
pool.shutdown();
for(Future<String> future : futures){
String result = future.get();
// log.info(result);
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}