多平台统一管理软件接口,如何实现多平台统一管理软件接口
297
2023-02-27
Java并发编程Callable与Future的应用实例代码
本文主要探究的是java并发编程callable与future的使用,分享了相关实例代码,具体介绍如下。
我们都知道实现多线程有2种方式,一种是继承Thread,一种是实现Runnable,但这2种方式都有一个缺陷,在任务完成后无法获取返回结果。要想获得返回结果,就得使用Callable,Callable任务可以有返回值,但是没法直接从CmcdrmBvpwaallable任务里获取返回值;想要获取Callabel任务的返回值,需要用到Future。所以Callable任务和Future模式,通常结合起来使用。
试想一个场景:需要一个帖子列表接口,除了需要返回帖子列表之外,还需要返回每条帖子的点赞列表和评论列表。一页10条帖子来计算,这个接口需要访问21次数据库,访问一次数据库按100ms计算,21次,累计时间为2.1s。这个响应时间,怕是无法令人满意的。怎么办呢?异步化改造接口。
查出帖子列表后,迭代帖子列表,在循环里起10个线程,并发去获取每条帖子的点赞列表,同时另起10个线程,并发去获取每条帖子的评论列表。这样改造之后,接口的响应时间大大缩短,在200ms。这个时候就要用Callabel结合Future来实现。
private List
if(page.getCount()==0||page==null||page.getList()==null){
return null;
}
//获取帖子列表
List
int size=circleResponseList.size();
ExecutorService commentPool = Executors.newFixedThreadPool(size);
ExecutorService supportPool = Executors.newFimcdrmBvpwaxedThreadPool(size);
try {
List
if (circleResponseList != null && circleResponseList.size() > 0) {
for (PostResponse postResponse : circleResponsehttp://List) {
final String circleId=postResponse.getId();
final String postUserId=postResponse.getUserId();
//查评论列表
Callable> callableComment = new Callable
>() {
@Override
public List
return circleReviewsBiz.getPostComments(circleId);
}
};
Future f = commentPool.submit(callableComment);
commentFutureList.add(f);
//查点赞列表
Callable> callableSupport = new Callable
>() {
@Override
public List
return circleZanBiz.findList(circleId);
}
};
Future supportFuture = supportPool.submit(callableSupport);
commentFutureList.add(supportFuture);
}
}
// 获取所有并发任务的执行结果
int i = 0;
PostResponse temp = null;
for (Future f : commentFutureList) {
temp = circleResponseList.get(i);
temp.setCommentList((List
temp.setSupportList((List
circleResponseList.set(i, temp);
i++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭线程池
commentPool.shutdown();
supportPool.shutdown();
}
return circleResponseList;
}
总结
以上就是本文关于Java并发编程Callable与Future的应用实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~