概述
Future>> f = pool.submit(IPThread, userinput);
int j = 0;
for (int i = 0; i < flist.size(); i++) {//等待所有提交线程结束
Future>> f = flist.get(i);
try{
List> 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>> result 变量添加运行结果,因为只是添加所以不涉及到线程安全问题。这样就可以完美解决了。当然要注意要每次请求都要新生成新实例,要不然,可能result会存在线程安全问题,通过设置scope为request解决。
scope="request" />
3、pool.submit(IPThread, userinput) 介绍一下
pool.submit(IPThread, userinput); 这个家伙有点奇怪,如果线程代码里面出现一定的情况是可以将线程的运行结果返回到userinput里面的,之前试了一下是当userinput是hashmap类型的时候可以。但是查询API解释说不可以返回的啊,实在是很奇怪。
###线程代码
@Override
public void run() {
Map map = queryIP();
if (map != null && map.size() > 0)
result.putAll(map);
}
最后
以上就是冷傲过客为你收集整理的java 多线程 结果汇总_多线程ThreadPoolExecutor的submit多线程处理一些结果汇总的全部内容,希望文章能够帮你解决java 多线程 结果汇总_多线程ThreadPoolExecutor的submit多线程处理一些结果汇总所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复