我想在 Java 中使用并发来向在线 API 发出请求,下载并解析响应文档,并将结果数据加载到数据库中。
有一个线程池,每个线程在其中请求、解析和加载是标准的吗?换句话说,只有一个类实现了 Runnable
。或者说,拥有三个不同的线程池是否更有效,第一个线程池发出请求并将它们推送到队列,第二个线程池从第一个队列轮询,解析并推送已解析的数据到第二个队列,最后第三个池从第二个队列轮询数据并加载到数据库中?在这种情况下,我将编写三个不同的类来实现 Runnable
。
最佳答案
您必须考虑处理的哪些部分将从并行性中受益。在线 API 通信很可能是候选者,因为将涉及套接字和网络等待。同样与数据库交互。如果有多个可用 CPU 内核,多线程解析可能只会提高性能。
将整个过程拆分为 3 个单独的类肯定会增加凝聚力,这意味着每个类的职责会更少,这是一件好事。另一方面,使这些类中的每一个都成为 Runnable
并具有多个队列会增加应用程序的复杂性(可能是不必要的)。
我建议创建 3 个单独的类,但不要将它们设置为 Runnable
。然后创建一个 Runnable
,contains
并 orchestrates
这 3 个类,即一个线程池。如果您发现这似乎不够快(并且在进行一些分析之后),请尝试将可运行对象拆分为 2 个线程池:一个下载和解析,以及一个数据库访问。
重点是,从简单开始,然后根据需要增加复杂性。
关于java - 单线程池与每个任务一个线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353162/