比如现在有个需求,一个统计站的某张表有百万行的数据,需要通过一系列的计算来再展示到页面(不能使用分页),计算可以跳过,就单纯的查询.如下: // long d1 = new Date().getTime();
// List<Map<String,Object>> result = service.findAll("select * from t_hourly_apk_area",null);
// System.out.println(result.size());
// System.out.println(new Date().getTime()-d1); 这样查询非常慢,并且JSP渲染也很慢。 这种情况下我考虑想了两种办法,一种是先加载一部分数据,到了JSP再通过AJAX主动发送请求获取剩余数据。 第二种是通过线程,比如数据共一百万,那么我分三个线程查询,每个线程查询三十三万。如下:class MyT extends Thread{
BaseService bs;
int star;
int size;
public MyT(BaseService bs , int star,int size) {
this.bs=bs;
this.star=star;
this.size=size;
}
@Override
public void run() {
System.out.println("---------------------------------");
long d1 = new Date().getTime();
List<Map<String,Object>> x = bs.findAll("select * from t_hourly_apk_area limit "+star+","+size,null);
System.out.println(x.size()+" ---- "+this.currentThread().getName());
System.out.println(new Date().getTime()-d1);
System.out.println("");
System.out.println("");
}
}
@RequestMapping(value="/down")
@Controller
public class IndexAction extends BaseAction{
@RequestMapping(value="/test")
public String test(){
// long d1 = new Date().getTime();
// List<Map<String,Object>> result = service.findAll("select * from t_hourly_apk_area",null);
// System.out.println(result.size());
// System.out.println(new Date().getTime()-d1);
MyT mt1 = new MyT(service, 0, 500000);
MyT mt2 = new MyT(service, 500000, 500000);
MyT mt3 = new MyT(service, 1000000, 600000);
mt1.start();
mt2.start();
mt3.start();
return null;
}
} 这样做有个问题是,线程跑完了数据我怎么返回前台? 我的核心问题就是想请教下,JAVA一次性请求大量数据(不包含分页等处理)的时候应该怎么处理!
添加回答
举报
0/150
提交
取消