Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最佳并发方法的选择_Java_Concurrency - Fatal编程技术网

Java 最佳并发方法的选择

Java 最佳并发方法的选择,java,concurrency,Java,Concurrency,我有两种不同的服务 我从第一个服务中得到字符串列表——大约700个值。然后我过滤这个列表,得到100个字符串。然后,我编写包含其中10个字符串的小查询,并将它们同步发送到第二个服务。当我从第二个服务中得到响应时(目前这一切都是同步完成的——我等待第二个服务返回响应),作为另一个字符串列表,并将这些值添加到最终列表中 我想提高这项工作的并发性。我想同时向第一台服务器发送小查询,获取这些查询的响应,对它们进行过滤,当我得到10个需要的过滤值时,我编写查询并将其发送到第二台服务(也同时)。在第二个服务

我有两种不同的服务

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

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

有没有什么好方法可以在没有低级线程的情况下实现这种逻辑?我几乎从未在Java中使用过并发性,所以我对语言的这一部分不太了解


提前感谢。

没有比好的旧线程更适合此任务的框架了。线程的问题是,从一开始就用synchronized关键字来教授线程,而在大多数情况下,这是可以避免的。尽可能地使用阻塞队列,您的程序就会干净易懂

您的程序结构可以如下所示:

T1->Q1->TP1->Q2->T2->Q3->TP2->Q4->T3
线程T1(可以是主线程)将输入列表拆分为小查询,并将它们放入队列Q1。 线程池TP1只是一些线程,每个线程从Q1获取查询,访问服务1并将结果放入队列Q2。 线程T2从Q2获取响应,对其进行过滤,以10为一批进行打包,然后放入Q3。 线程池TP2将查询从Q3发送到第二个服务,并将结果放入Q4。
线程T3形成最终列表。

;除此之外,你还需要问一个更具体的问题。你能提供更多关于“服务”这个词的细节吗?什么样的服务?基于哪个协议(如HTTP)?在您将调用程序从单线程更改为并发后,这是否会成为瓶颈?