多线程ThreadPoolExecutor的submit多线程处理一些结果汇总

Future<List<Map<String, Object>>> f = pool.submit(IPThread, userinput);
           int j = 0;

			for (int i = 0; i < flist.size(); i++) {//等待所有提交线程结束

				Future<List<Map<String, Object>>> f = flist.get(i);
				
               try{
            	   
            	   List<Map<String, Object>> result=f.get();//等待线程执行完成,没有设置超时。一直等待任务完成。
            	   
            	   if (result!=null||result.size()!=0) {
            		   
            		   j++;
					
				}
            	   
               }
				catch (InterruptedException e) {  
				    f.cancel(true);  
				} catch (ExecutionException e) {  
				    f.cancel(true);  
				} 
				

			}
			

1、问题介绍

项目中遇到一个棘手的问题,就是多线程处理一些结果。但是最后要获得每个线程运行的结果汇总。

2、解决思路

思路是这样子的,有一个主线程用来调用这些子线程。每个线程提交后,都会向static 

List<List<Map<String, Object>>> result 变量添加运行结果,因为只是添加所以不涉及到线程安全问题。这样就可以完美解决了。当然要注意要每次请求都要新生成新实例,要不然,可能result会存在线程安全问题,通过设置scope为request解决。

<jsp:useBean id="resultBean" class="com.**"
	scope="request" />

3、pool.submit(IPThread, userinput) 介绍一下

pool.submit(IPThread, userinput); 这个家伙有点奇怪,如果线程代码里面出现一定的情况是可以将线程的运行结果返回到userinput里面的,之前试了一下是当userinput是hashmap类型的时候可以。但是查询API解释说不可以返回的啊,实在是很奇怪。

###线程代码
@Override
	public void run() {
		Map<String, Object> map = queryIP();
		if (map != null && map.size() > 0)
			result.putAll(map);
}

 

转载于:https://my.oschina.net/u/2308739/blog/679463

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值