文档章节

线程

涩谷直子
 涩谷直子
发布于 2017/07/21 16:00
字数 472
阅读 2
收藏 0

插入方法:

public List insertPhone(String idCmsUploadFiles, Map assignMap) throws IOException{
		CmsLogger.audit("审批通过,开始插入发分明细表:时间为:" + DateUtil.formatDate(new Date(), "yyyy-MM-dd HH:mm:ssS") + "---参数为:idCmsUploadFiles=" + idCmsUploadFiles + "---assignMap=" + JSONObject.toJSONString(assignMap));
		List list = new ArrayList();
		try{
			//获取切分的文件
			List splitFileList = assignIntegrationService.listCmsSplitFilesByUploadFilesId(idCmsUploadFiles);
	        int runnableNum = splitFileList.size();
	        CmsLogger.audit("获取到切分文件"+runnableNum+"个");
	        CyclicBarrier barrier  = new CyclicBarrier(runnableNum);
	        for(int k = 0 ; k < runnableNum ; k++){
	        	Map splitFileMap = (Map)splitFileList.get(k);
	        	CmsLogger.audit("获取到切分文件对象:splitFileMap = " + JSONObject.toJSONString(splitFileMap));
	        	Future<String> future = executor.submit(new insertPhoneRunnable(barrier,assignMap,splitFileMap));
	        	list.add(future);
	        }
		} catch(Exception e){
			CmsLogger.error("审批通过,开始插入发分明细表出现异常:"  + e.getMessage(),e);
		} finally {
			executor.shutdown();
		}
		return list;
	}

 

插入线程类:

class insertPhoneRunnable implements Callable<String>{
		
		private CyclicBarrier cyclicBarrier;
		private Map splitFileMap;
		private Map assignMap;
		private String idAssignIntegration;
		public insertPhoneRunnable(CyclicBarrier cyclicBarrier,Map assignMap,Map splitFileMap) {
			this.cyclicBarrier = cyclicBarrier;
			this.assignMap = assignMap;
			this.splitFileMap = splitFileMap;
			idAssignIntegration = (String) assignMap.get("idAssignIntegration");
		}

		@Override
		public String call() {
			String flag = "00";
            try {
				String splitFilePath = (String) splitFileMap.get("splitFilePath");
				String batch = (String) splitFileMap.get("threadId");
				CmsLogger.audit("线程"+Thread.currentThread().getName()+"正在读取文件写入发分明细表,splitFilePath=" +splitFilePath + "batch=" + batch);
				
				List paramList = new ArrayList();
				BufferedReader br = null;
				File file = null;
				String content = "";
				int i = 0;
				try{
					file = new File(splitFilePath);
					br = new BufferedReader(new FileReader(file));
					
					while((content = br.readLine()) != null){
						i++;
						String[] cons = content.split(",");
						Map map = new HashMap();
						map.put("phoneNo", cons[1]);
						map.put("idIntegrationAssign", idAssignIntegration);
						map.put("batch", batch);
						map.put("integration", cons[2]);
						map.put("status", "0");
						paramList.add(map);
						if(i % 20 == 0){
							assignIntegrationService.insertPhoneToDelivery(paramList);
							paramList.clear();
						}
					}
					if(!paramList.isEmpty()){
						assignIntegrationService.insertPhoneToDelivery(paramList);
					}
				} catch (Exception e){
					flag = "01";
					//记录插入失败的文件
					CmsLogger.error("插入发分明细表出现异常,异常发分文件为:" + splitFilePath,e);
					Map tmpMap = assignIntegrationService.getAssignIntegration(idAssignIntegration);
					Map errorMap = new HashMap();
					errorMap.put("idAssignIntegration", idAssignIntegration);
					errorMap.put("phoneListReason", tmpMap.get("phoneListReason") + "[插入发分明细表出现异常,异常发分文件为:" + splitFilePath +"]");
					errorMap.put("updateDate", new Timestamp(System.currentTimeMillis()));
					assignIntegrationService.updateAssignIntegrationById(errorMap);
				} finally {
					if(br != null){
						try {
							br.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					file = null;
					CmsLogger.audit("线程"+Thread.currentThread().getName()+"写入文件["+splitFilePath+"]完毕,共"+i+"条记录,等待其他线程写入完毕");
					cyclicBarrier.await();
				}
            } catch (InterruptedException e) {
                CmsLogger.error("插入发分明细表出现异常," + e.getMessage(),e);
                flag = "01";
            }catch(BrokenBarrierException e){
                CmsLogger.error("插入发分明细表出现异常," + e.getMessage(),e);
                flag = "01";
            }
			CmsLogger.audit("所有线程写入完毕,返回值为"+ flag +",时间为:" + DateUtil.formatDate(new Date(), "yyyy-MM-dd HH:mm:ssS"));
			return flag;
		}
	}

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: apollo
下一篇: Ajax无刷新上传
涩谷直子
粉丝 3
博文 34
码字总数 45758
作品 0
深圳
程序员
私信 提问

暂无文章

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
9
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
4
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
3
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
1
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部