线程池中的线程数以获得良好性能

时间:2014-02-27 08:45:46

标签: java multithreading threadpool connection-pooling apache-httpclient-4.x

我有一个Executor线程池,核心大小和最大大小都保持在40,每个线程将使用来自Apache HTTP客户端的PoolingClientConnectionManager的HTTP连接,每个主机路由有40个连接。我可以看到,如果负载较小,性能也会降低......你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

使用以下内容:

ExecutorService service = Executors.newCachedThreadPool();

service.execute(someRunnable);

在这种情况下,您无需担心正在运行的线程数。 系统会自动为您上下调整线程数。

以下是文档:

  

public static ExecutorService newCachedThreadPool()

     

创建一个线程池,根据需要创建新线程,但是会   在先前构造的线程可用时重用它们。这些   池通常会提高执行程序的性能   许多短暂的异步任务。执行调用将重用   以前构造的线程(如果有)如果没有现有的线程   可用时,将创建一个新线程并将其添加到池中。主题   未使用60秒的任务将被终止并删除   从缓存。因此,一个长时间闲置的游泳池将会   不消耗任何资源。请注意具有相似属性的池   可以创建不同的细节(例如,超时参数)   使用ThreadPoolExecutor构造函数。

     

返回:新创建的线程池

希望它有所帮助。

答案 1 :(得分:0)

这完全取决于运行JVM的主机中有多少核心以及每个线程要使用多少CPU。

假设一个8核心主机 nothing else从JVM运行,你执行的每个任务都是纯粹的CPU绑定,那么你可能希望线程池大小为7(离开一个核心可用于JVM活动,如垃圾收集和其他操作系统任务。)

然而,系统永远不可预测,所以最好在预期的负载下进行一些分析,看看什么效果最好。