运行Web服务请求的线程池的合理线程数

mga*_*mer 17 java concurrency web-services threadpool

在Java中创建FixedThreadPool Executor对象时,您需要传递一个参数,该参数描述Executor可以并发执行的线程数.我正在建立一个服务类,负责处理大量的电话号码.对于每个电话号码,我需要执行Web服务(这是我的瓶颈),然后在hashmap中保存响应.

为了使这个瓶颈对我的服务性能的危害减少,我决定创建一个Worker类来获取未处理的元素并处理它们.Worker类实现了Runnable接口,我使用Executor运行Workers.

可以在同一时间运行的Worker数量取决于Executor FixedThreadPool的大小.ThreadPool的安全大小是多少?当我用一些大数字作为参数创建FixedTheradPool时会发生什么?

Lar*_*ren 8

可以考虑的东西正在考虑

Runtime.getRuntime().availableProcessors()
Run Code Online (Sandbox Code Playgroud)

它给出了一些对系统有意义的线程的方向.

  • Web服务调用可能主要是IO等待,因此与CPU数量没有直接关系 (2认同)

ska*_*man 6

如果每个工作线程都需要进行Web服务调用,那么池中的线程数应该受到Web服务可以处理的并发请求数量的强烈影响.除此之外的任何其他线程都不会淹没Web服务.