java多线程异步分页查询

同时查询总条数和分页列表

在实际的开发过程中,我们经常会遇到分页查询,一般需要查询符合条件的总条数和某一页的列表数据

假设:

1.查询总条数用时:2秒
2.查询某一页的列表用时:3秒
如果顺序同步查询加起来需要 5 秒钟

而如果采用异步查询的只需要max(2,3)也就3秒钟,可以大大提高查询效率,下面来看代码实现,例子jdk8中的CompletableFuture可以轻松实现!

/** 本实例中的代码为部分代码,需要根据自己的业务调整 **/
public Map<String,Object> query(){
	
	//查询一班的总人数
	String countSql="select count(1) from student where class='1班' ";
	//分页查询一班的前100人的信息
	String listSql="select * from student where class='1班' limit 100 ";
	//查询总个数线程
	CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(() -> {
			long c = (long)dao2._queryObject(countSql);
			return c;
		});
	//查询分页的列表
	CompletableFuture<List<Map<String,Object>>> listFuture = CompletableFuture.supplyAsync( () -> {
		List<Map<String,Object>> list = dao2._queryMapList(listSql);
		return list;
	} );
	//获取 count 和  list 组合成map 返回前台
	try {
		Map<String,Object> map = new HashMap<String,Object>(){{
			put("count",countFuture.get());
			put("list",listFuture.get());
		}};
		return map;
	}catch (Exception e){
		throw new RuntimeException(e);
	}
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×