选择最佳并发方法

时间:2014-03-22 15:48:53

标签: java concurrency

我有两个独立的服务。

我从第一个服务获得字符串列表 - 大约700个值。然后我过滤此列表并获得100个字符串。然后我编写包含其中10个字符串的小查询,并将它们同步发送到第二个服务。当我从第二个服务得到响应时(目前它同步完成 - 我等待第二个服务返回响应)作为另一个字符串列表并将这些值添加到最终列表中。

我想增强这项工作的并发性。我想同时向第一台服务器发送小查询,获取这些查询的响应,过滤它们,当我得到10个需要的过滤值时,我编写并发送查询到第二个服务(也同时)。在第二个服务返回响应之后,我将这个响应(字符串列表)添加到最终列表中(据我所知,我应该使用像synchronized块这样的东西)。

有没有很好的方法来实现这个逻辑而没有低级和丑陋的线程?我几乎从不使用Java中的并发性,所以我不太了解这部分语言。

提前致谢。

1 个答案:

答案 0 :(得分:0)

没有比旧线程更适合此任务的框架。线程的问题在于它们从一开始就使用synchronized关键字教授,而在大多数情况下,它可以避免。尽可能使用BlockingQueues,您的程序将是干净且易于理解的。

程序的结构如下:

T1->Q1->TP1->Q2->T2->Q3->TP2->Q4->T3

线程T1(它可以是主线程)将输入列表拆分为小查询并将它们放入队列Q1中。 线程池TP1只是许多线程,每个线程从Q1获取查询,访问服务1并将结果放入队列Q2。 线程T2从Q2获取响应,过滤它们,批量包装为10并放入Q3。 线程池TP2将查询从Q3发送到第二个服务,并将结果放入Q4。 线程T3构成最终列表。