java多线程并行查询

z86870530 2016-07-11 11:37:50
背景:我开5个线程查询不同数据库,等待这5个线程全部查询完毕汇集结果,再做下一步处理
如何汇集这5个线程的结果?请给予解决方案。
当前我用如下方法解决。
while(true){
Thread.sleep(100);
if(runMap.containsKey("ok")){
System.out.println("okokokokokokokokok");
break;
}
}
每个线程结束会往runMap中增加一个KEY,while不断循环直到获得结束标示ok.
...全文
1092 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wrong1111 2016-08-22
  • 打赏
  • 举报
回复
CountDownLatch 就是干这个的
土豆的老公 2016-08-19
  • 打赏
  • 举报
回复
你用一个计数器, 记住5个线程是否执行完 public class D{ public int n = 0 ; public synchronized void a(){ if(++n==5){ } } } 其他线程每次执行成功,就调下a()方法就好了。
z86870530 2016-08-17
  • 打赏
  • 举报
回复
引用 8 楼 fengspg 的回复:
[quote=引用 7 楼 ITjavaman 的回复:] 分别为你的5个线程配置一个循环标志,用个布尔值 单线程开始的时候把布尔值设置为false,线程运行完改变为true 然后你再创建个主线程用来检测这5个布尔值,当5个都为true,就执行下一步 否则继续循环检测标志位
你确定这样可以玩?[/quote] ---------------------------------------------- 用这个即可解决CountDownLatch 事实我开始还真是这么干的
Intboy 2016-07-15
  • 打赏
  • 举报
回复
引用 7 楼 ITjavaman 的回复:
分别为你的5个线程配置一个循环标志,用个布尔值 单线程开始的时候把布尔值设置为false,线程运行完改变为true 然后你再创建个主线程用来检测这5个布尔值,当5个都为true,就执行下一步 否则继续循环检测标志位
你确定这样可以玩?
ITjavaman 2016-07-14
  • 打赏
  • 举报
回复
分别为你的5个线程配置一个循环标志,用个布尔值 单线程开始的时候把布尔值设置为false,线程运行完改变为true 然后你再创建个主线程用来检测这5个布尔值,当5个都为true,就执行下一步 否则继续循环检测标志位
LOVEv海盗 2016-07-11
  • 打赏
  • 举报
回复
5个数据库位于不同的磁盘上吗?IO是否有瓶颈? 你可以用callable作为每个线程的任务;
Intboy 2016-07-11
  • 打赏
  • 举报
回复
CountDownLatch
huan_1993 2016-07-11
  • 打赏
  • 举报
回复
final CountDownLatch latch = new CountDownLatch(5); ExecutorService threadPool = Executors.newFixedThreadPool(5); List<Future<String>> futureTaskList = new ArrayList<Future<String>>(5); for (int i = 0; i < 5; i++) { futureTaskList.add(threadPool.submit(new Callable<String>() { @Override public String call() throws Exception { latch.countDown(); return "ok..."; } })); } try { latch.await(); } catch (InterruptedException e1) { e1.printStackTrace(); } try { for (Future<String> future : futureTaskList) { System.out.println(future.get()); } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); }
twqllq98849577 2016-07-11
  • 打赏
  • 举报
回复
这个不可以顺序执行吗,在这里多线程有何优势
yifanlxj 2016-07-11
  • 打赏
  • 举报
回复
线程看起来好高深啊!
z86870530 2016-07-11
  • 打赏
  • 举报
回复
引用 4 楼 byssh1989 的回复:
5个数据库位于不同的磁盘上吗?IO是否有瓶颈? 你可以用callable作为每个线程的任务;
-------------------------------- 我想要的就是二楼的效果 也就是你说的callable+CountDownLatch 至于为什么这么用,因为我取“不同服务器“的数据库数据,这种我就想可不可以用多线程分发查询,事实我做了一版速度确实是最后一个查询的最大时间。 至于是说的IO我没没考虑过。 其他问题你补充一下?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧