守候你守候我
文件读取:首先是一个文件上传,数据入库,10-200万条不等,这里主要考虑到一次性读取,JVM分配出来的栈内存不一定会够(个人对内存这一块还是处于一知半解的状态,所以比较谨慎,若诸位大神有好的认知,希望评论留下地址分享一下),是依行读取数据,设定一个批量值,当读取的数据达到一定量之后,执行批量入库操作,清空集合,再接着读取。//读取文件内容while((s = br.readLine())!=null){//判断是否达到单次处理量if(num%leadingNum==0&#!=0){int a = stencDao.insertBatch(listBean);if(a!=leadingNum){flag = false;}//清空集合listBean.clear();}String value = s.trim();//将读取到的内容放入集合中if(!value.equals("")){StencilCustomer bean = new StencilCustomer();bean.setCustomerPhone(value);bean.setLinkStencilId(id);listBean.add(bean);num ++;}}数据处理:这里的思路也是将数据小化然后处理,这里使用了多线程,设定单个线程处理量,然后开启多个线程处理,这里需要考虑你的服务器的承载能力,如果线程开得太多了,处理不过来,会出现蹦死的情况。例如200万数据,我开了20个线程,单个线程处理600条。//建立一个线程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,new ArrayBlockingQueue(minTaskNumber),new ThreadPoolExecutor.DiscardOldestPolicy());//当正在执行的线程数达到最大执行线程数的时候等待boolean flag = true;while(flag){Thread.sleep(1000);//休眠2ms查询一次int c = threadPool.getActiveCount();//线程池中活动中的线程数量if(c