先描述一下当时的场景,有一个需求,需要根据员工编号查询两万员工的信息,但是要去另一个微服务查询,所以使用feign的方式请求接口,但是一次查询两万个员工响应速度很慢,所以想要分几个线程请求接口,这里使用JDK1.7提供的多线程并发处理框架ForkJoin。代码是这样的:
// ForkJoin任务
private class MyRecursiveTask extends RecursiveTask<List<UserDTO>> {
private final List<String> empCodeList;
public MyRecursiveTask(List<String> empCodeList){
this.empCodeList = empCodeList;
}
@Override
protected List<UserDTO> compute() {
// 如果list的长度小于阈值就执行查询操作,反之将list二分
if(empCodeList.size() <= threshold){
// 执行查询
QueryEmployeeDTO queryEmployeeDTO = new QueryEmployeeDTO();
queryEmployeeDTO.setEmpCodes(empCodeList);
List<EmployeeVO> empList = thirdPartyApi.getEmpList(queryEmployeeDTO);
// 转换DTO对象
List<UserDTO> userDTOList