Web应用程序中异步任务的线程池配置

时间:2014-03-07 05:01:30

标签: java java-ee threadpool

我有一个REST API,后端必须调用异步任务。此任务将邮件发送到第三方URL。我想将此任务保留在线程池中,并且需要300个任务/秒的性能。我使用了一个HttpClient池,每个路由有50个连接,每个使用HttpClient的线程可以在一秒内完成5个任务。所以我保持> 60个线程来实现我的目标。这种方法是否正确?

1 个答案:

答案 0 :(得分:0)

如果您有更多任务要执行异步操作,例如日志记录,数据库条目等,那么创建一个类来完成它们,使用线程池执行程序并测试它。保持初始和最大线程数可配置,因为开发,测试和实时环境的结果会有所不同。还可以使用http客户端功能以最佳方式执行网络部分。

与PoolingHttpClientConnectionManager http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html

类似

所以你真的需要使用一个线程池,然后在其中加入网络部分。稍后,如果你做数据库操作也可以单独选择那些。

TheadPoolExecutor javadoc有一些指针http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

如果队列溢出

,这个consrtructor似乎提供了调整和处理案例的大多数选项
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)