多线程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);  
				} 
				

			}

一、问题介绍

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

二、解决思路

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

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

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

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

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

###线程代码
@Override
	public void run() {
		Map<String, Object> map = queryIP();
		if (map != null && map.size() > 0)
			result.putAll(map);
}
相关文章
相关标签/搜索