public List<User> getUserList(int page,int pageSize) {
List<User> users = null;
try {
ForkJoinPool pool = new ForkJoinPool(8);
ForkJoinTask<List<User>> submit = pool.submit(new UserTask(1, 7, userDao));
users = submit.get();
System.err.println( users.size() );
System.err.println( users.toString() );
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return users;
}
public class UserTask extends RecursiveTask<List<User>> {
private int start;
private int totalPage;
private IUserDao userDao;
public UserTask(int start, int totalPage, IUserDao userDao) {
this.start = start;
this.totalPage = totalPage;
this.userDao = userDao;
}
@Override
protected List<User> compute() {
if (totalPage - start <= THRESHOLD) {
List<User> allList = new ArrayList<>();
for (int pageNo = start; pageNo <= totalPage; pageNo++) {
Map<String,Object> params = new HashMap<>();
params.put("page",(pageNo-1) * pageSize);
params.put("pageSize",pageSize);
List<User> userList = userDao.getUserList(params);
allList.addAll(userList);
}
return allList;
}
int middle = (start + totalPage) / 2;
UserTask left = new UserTask(start, middle, userDao);
UserTask right = new UserTask(middle+1, totalPage, userDao);
invokeAll(left, right);
List<User> allList = new ArrayList<>();
List<User> leftResult = left.join();
List<User> rightResult = right.join();
allList.addAll(leftResult);
allList.addAll(rightResult);
return allList;
}
12-23
952
01-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交