/**
* 并行调用服务封装
*/
public class ParallelInvokeCompletionService {
public List<BaseDTO<Object>> executeTasks(List<Callable<BaseDTO<Object>>> tasks, ExecutorService executorService) throws ExecutionException, InterruptedException {
CompletionService<BaseDTO<Object>> completionService = new CompletionService<>(executorService);
for (int i = 0; i < tasks.size(); i++) {
completionService.submit(tasks.get(i));
}
List<BaseDTO<Object>> list = new ArrayList<>();
for (int i = 0; i < tasks.size(); i++) {
Future<BaseDTO<Object>> future = completionService.poll();
if (future != null) {
BaseDTO<Object> obj = future.get();
list.add(obj);
}
}
return list;
}
}
/**
* 并行调用服务具体实现
* @param <T>
*/
public class CompletionService<T> {
/**
* 阻塞队列用户存储并行执行的任务结果
*/
private Queue<Future<T>> futures = new LinkedBlockingDeque<>();
/**
* 线程池执行器
*/
private ExecutorService executorService = null;
public CompletionService(ExecutorService executorService){
this.executorService = executorService;
}
public void submit(Callable callable){
futures.add(executorService.submit(callable));
}
public Future<T> poll(){
return futures.poll();
}
}
public class UserInfoService {
public UserInfoDTO getUserInfo() {
UserInfoDTO userInfoDTO = new UserInfoDTO("lessly", 18);
return userInfoDTO;
}
}
public class LabelService {
public LabelDTO getLabelInfo(){
return new LabelDTO("Label名称");
}
}
public class BannerService {
public BannerDTO getBannerInfo(){
return new BannerDTO("Banner名称");
}
}
public class BaseDTO<T extends Object> {
private String key;
private T data;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}