账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    多并发下多线程遍历list问题
    31
    0

    今天做导出 查出的数据有3万条 还要遍历做一些处理 结果就超时
    想到多线程遍历list 去网上查找 找到这块代码:

    public String list2Str(List<String> list, final int nThreads) throws Exception {  
                if (list == null || list.isEmpty()) {  
                    return null;  
                }  
                  
                StringBuffer ret = new StringBuffer();  
          
                int size = list.size();  
                ExecutorService executorService = Executors.newFixedThreadPool(nThreads);  
                List<Future<String>> futures = new ArrayList<Future<String>>(nThreads);  
                  
                for (int i = 0; i < nThreads; i++) {  
                    final List<String> subList = list.subList(size / nThreads * i, size / nThreads * (i + 1));  
                    Callable<String> task = new Callable<String>() {  
                        @Override  
                        public String call() throws Exception {  
                            StringBuffer sb = new StringBuffer();  
                            for (String str : subList) {  
                                sb.append(str);  
                            }  
                            return sb.toString();  
                        }  
                    };  
                    futures.add(executorService.submit(task));  
                }  
                  
                for (Future<String> future : futures) {  
                    ret.append(future.get());  
                }  
                executorService.shutdown();  
                  
                return ret.toString();  
            }  
        } 

    我调用时开了5个线程 我想问 每次导出就开启5个线程 如果多个人同时导出 比如10000个人同时导出 那岂不是就开启了50000个线程了!!!

    没问题吗???

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部