如何在这里使用多线程

时间:2016-07-07 06:25:33

标签: java multithreading

我有一个代码,其中查询了大量数据。问题是自动生成的查询变得太大而且通常超时,所以我决定只在我的代码中划分数据,以使代码工作,而不是给出超时异常。此外,我决定使用多线程创建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。

0 个答案:

没有答案