java ExecutorService 多线程返回值
package com.harmonywisdom.ajproduct.ajproduct.onemap.service.impl.util;import java.util.*;import java.util.concurrent.Callable;/*** @Description 行业管理部门统计* @Author WangKun* @Date 2020-11-25 13:50* @Ver
·
import java.util.*;
import java.util.concurrent.Callable;
/**
* @Description 行业管理部门统计
* @Author WangKun
* @Date 2020-11-25 13:50
* @Version
*/
public class ThreadAdminDepartmentRiskLevel implements Callable {
private String adminDepartment; // 参数,参数类型自定义
private List<Object[]> fillInList;
public ThreadAdminDepartmentRiskLevel(String adminDepartment, List<Object[]> fillInList ) {
this.adminDepartment = adminDepartment;
this.fillInList = fillInList;
}
/**
* @param
* @Description 实现call方法,处理业务
* @Throws
* @Return void
* @Date 2020-11-25 13:50
* @Author WangKun
**/
@Override
public Object call() throws Exception {
// 返回类型(类型由开启线程时定义)
Map<String, Integer> map = new HashMap<>();
// 处理业务
//{...}
return map;
}
}
调用
// 在准备使用的地方开启线程
ExecutorService executor = new ThreadPoolExecutor(2, 4,
1L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
//CompletionService<类型定义什么,call方法的返回类型就是什么,一定要一样>
CompletionService<Map<String, Integer>> completion = new ExecutorCompletionService<>(executor);
try {
// 提交数据,交给线程处理
completion.submit(new ThreadAdminDepartmentRiskLevel(adminDepartment, fillInList));
// 获取返回值 completion.take().get()
Map<String, Integer> map = completion.take().get();
} catch (InterruptedException | ExecutionException e) {
executor.shutdownNow();
e.printStackTrace();
} finally {
executor.shutdown();
}
更多推荐
已为社区贡献2条内容
所有评论(0)