构建树用到线程池

	/**
	 * 根据数据库构建平台树
	 * 
	 * @param modelList
	 * @param treeNodeMap
	 * @param root
	 */
	private void buildRoot(List<EsCompanyForTreeQueryItem> modelList, Map<Long, TreeNode> treeNodeMap, TreeNode root,boolean isAdd) {
		EsCompanyForTreeQueryItem companyFictitious =null;
		if(isAdd){
			companyFictitious =new EsCompanyForTreeQueryItem();
			companyFictitious.setEscoId(999L);
			companyFictitious.setEscoCompanyNameCn("离职禁用无组织");
			modelList.add(companyFictitious);
		}
		// 根据数据库数据构建树结点
		UserDetails user=SessionContext.getUser();
		TreeNode node;
		EsCompanyForTreeQueryItem element;
		ExecutorService pool=Executors.newFixedThreadPool(4);
		/** 
         * 容量为2的阻塞队列 
         */  
        //BlockingQueue<Future> queue = new LinkedBlockingDeque<Future>(2);
        //实例化CompletionService  
        CompletionService completionService = new ExecutorCompletionService(  
                pool);
        int length=modelList.size();
        int index;
        List<EsCompanyForTreeQueryItem> tempList;
        for(int i=0;i<length;i+=3000){
        	index=i+3000;
        	if (index > length) {
                tempList = modelList.subList(i, length);
            } else {
                tempList = modelList.subList(i, index);
            }
        	Thread thread=new Thread(new CycleTask(tempList,companyFictitious));
        	completionService.submit(thread,new Object());
        }
        pool.shutdown();
        while(!pool.isTerminated()){
        	Object lock = new Object();
            synchronized (lock) {
                try {
                    lock.wait(1000);
                } catch (InterruptedException e) {
                }
            }
        }
        treeNodeMap=alltreeNodeMap;
		/*for (Iterator iter = modelList.iterator(); iter.hasNext();) {
			element = (EsCompanyQueryItem) iter.next();
			node = new TreeNode();
			node.setId(element.getEscoId().toString());
			//node.setLabel(element.getEscoCompanyNameCn());
			if ("en_US".equals(user.getLanguage())){
				node.setLabel(element.getEscoCompanyNameEn());
			}else {
				node.setLabel(element.getEscoCompanyNameCn());
			}
			if (null!=companyFictitious && element.getEscoParentEscoId() == -1) {
				companyFictitious.setEscoParentEscoId(element.getEscoId());
			}
			node.setParentId(element.getEscoParentEscoId().toString());
			node.setData(element);
			treeNodeMap.put(element.getEscoId(), node);
		}*/
		// 根据上级平台ID构建上下级关系
        
    	for (Iterator<EsCompanyForTreeQueryItem> iter = modelList.iterator(); iter.hasNext();) {
			element = iter.next();
			// 如果上级平台ID为-1则为总公司根节点,否则为分公司
			if (element.getEscoParentEscoId() == -1) {
				root.addChild(treeNodeMap.get(element.getEscoId()));
			} else {
				Long parentId = element.getEscoParentEscoId();
				node = treeNodeMap.get(parentId);
				if(node != null){
					node.addChild(treeNodeMap.get(element.getEscoId()));
				}
			}
		}
	}
	
	class CycleTask implements Runnable{
		
		public CycleTask(List<EsCompanyForTreeQueryItem> list,EsCompanyForTreeQueryItem item){
			tempList=list;
			companyFictitious=item;
		}

		List<EsCompanyForTreeQueryItem> tempList;
		EsCompanyForTreeQueryItem element;
		TreeNode node;
		EsCompanyForTreeQueryItem companyFictitious =null;
		Map<Long, TreeNode> treeNodeMap=new HashMap<Long,TreeNode>();

		@Override
		public void run() {
			for (Iterator<EsCompanyForTreeQueryItem> iter = tempList.iterator(); iter.hasNext();) {
				element = iter.next();
				node = new TreeNode();
				node.setId(element.getEscoId().toString());
				node.setLabel(element.getEscoCompanyNameCn());
				if (null!=companyFictitious && element.getEscoParentEscoId() == -1) {
					companyFictitious.setEscoParentEscoId(element.getEscoId());
				}
				node.setParentId(element.getEscoParentEscoId().toString());
				node.setData(element);
				treeNodeMap.put(element.getEscoId(), node);
			}
			alltreeNodeMap.putAll(treeNodeMap);
		}
	}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值