我有一个代码,其中查询了大量数据。问题是自动生成的查询变得太大而且通常超时,所以我决定只在我的代码中划分数据,以使代码工作,而不是给出超时异常。此外,我决定使用多线程创建100个线程。 下面是我的一段代码
ExecutorService executor = Executors.newFixedThreadPool(100);
final int size=nodeIds.size()%100==0?(nodeIds.size()/100):(nodeIds.size()/100)+1;
List<Future<CacheImpl<BacktestingResult>>> futures = new ArrayList<Future<CacheImpl<BacktestingResult>>>(100);
for(int i=0;i<nodeIds.size();){
final int start=i;
futures.add(executor.submit(new Callable<CacheImpl<BacktestingResult>>() {
public CacheImpl<BacktestingResult> call() {
return new CacheImpl<BacktestingResult>(
ServiceLocator.getBalanceService().getBacktestingResults(
report.getCriteria().fromDate,
report.getCriteria().toDate,
new ArrayList<String>(new ArrayList<String>(nodeIds).subList(start, size+start)),
report.getCriteria().getExceptionCategories(),
report.getCriteria().getExceptionTypes(),
report.getCriteria().getGroup().getCriteria()));
}
}));
i=i+size+1;
}
问题是它仍然无法工作,可能创建100个线程并不理想。有人可以建议一个更好的方法来做到这一点。来自此处的nodeIds> 200000。