我正在使用需要从Rest API请求数据的客户端应用程序。其中许多请求是独立的,因此可以异步调用它们。我使用ThreadPoolExecutor这样做,我已经看到它可以配置几个参数:
我读了this article,我理解以下内容:
但我有一些问题:
提前谢谢
更新
我目前的价值是:
答案 0 :(得分:3)
corePoolSize
要保留在池中的线程数,即使它们处于空闲状态,除非设置了{@code allowCoreThreadTimeOut} maximumPoolSize
池中允许的最大线程数 corePoolSize是您希望永远等待的线程数,即使没有人请求它们。 maximumPoolSize
是您将启动的Rest API的最多线程数和因此并发请求数。
corePoolSize >= requests per second * seconds per request
maximumPoolSize >= maximum requests per second * seconds per request
queueCapacity <= maximumPoolSize * maxWaitTime / timePerRequest
(您应该对此进行监控,以便了解何时必须采取行动。)
您必须记住,Rest API或您自己的应用程序/服务器/带宽可能会对并发连接数施加一些限制,并且许多并发请求可能会增加每个请求的时间。
我宁愿保持corePoolSize
低,keepAliveTime
相当高。
你必须记住,每个线程只为并行HTTP请求增加了一些开销,应该有一个NIO变体,它可以在没有大量线程的情况下完成此任务。也许你可以试试Apache MINA。