单线程池与每个任务的一个线程池

use*_*310 3 java concurrency multithreading threadpool runnable

我想在Java中使用并发来向在线API发出请求,下载并解析响应文档,并将结果数据加载到数据库中.

拥有一个线程池是否标准,每个线程请求,解析和加载?换句话说,只有一个类实现Runnable.或者是更有效的有,比如说,线程的三种不同的游泳池,带螺纹发出请求,并将其推到一个队列,线程轮询从第一队列中的第二池,解析和推解析数据的第一个池到第二个队列,最后第三个池从第二个队列轮询数据并加载到数据库中?在这种情况下,我会编写三个不同的类来实现Runnable.

Bra*_*ady 7

您必须考虑处理的哪些部分将从并行性中受益.在线API通信很可能是候选者,因为将涉及套接字和网络等待.与DB交互相似.如果有多个可用的 CPU核心,多线程解析可能只会提高性能.

将整个过程分成3个单独的类肯定会增加凝聚力,这意味着每个班级的责任都会减少,这是一件好事.另一方面,使这些类中的每一个成为一个Runnable并具有多个队列将增加应用程序的复杂性(可能是不必要的).

我建议制作3个单独的课程,但不要制作它们Runnable.然后进行Runnable的是containsorchestrates3个班,这是一个单独的线程池.如果您发现这看起来不够快(并且在进行一些分析之后),请尝试将runnable拆分为2个线程池:下载和解析以及db访问.

关键是,开始简单并根据需要增加复杂性.