在运行时更改java中池连接管理器中的线程数
我正在尝试实现一个项目,该项目使用,池中最多有20个线程。现在,根据流量,我想在运行时更改线程数。有可能吗在运行时更改java中池连接管理器中的线程数,java,multithreading,threadpool,Java,Multithreading,Threadpool,我正在尝试实现一个项目,该项目使用,池中最多有20个线程。现在,根据流量,我想在运行时更改线程数。有可能吗 我有一个可行的解决方案,我有一组新的线程池,在更改max connections时对其进行初始化,然后替换现有的线程池。一种缓冲开关。但我不确定这是否是最佳解决方案。我假设您现在使用的是Executors.newFixedThreadPool。很遗憾,无法动态调整此池的大小 更好的自适应解决方案是Executors.newCachedThreadPool。请看下面的图片 执行调用将重用以前
我有一个可行的解决方案,我有一组新的线程池,在更改max connections时对其进行初始化,然后替换现有的线程池。一种缓冲开关。但我不确定这是否是最佳解决方案。我假设您现在使用的是
Executors.newFixedThreadPool
。很遗憾,无法动态调整此池的大小
更好的自适应解决方案是Executors.newCachedThreadPool
。请看下面的图片
执行调用将重用以前构造的线程,如果
可用。如果没有可用的现有线程,将创建一个新线程
创建并添加到池中。尚未用于此操作的线程
60秒被终止并从缓存中删除
你能展示一些你的代码来展示你是如何在新的池中交换的吗?为什么不给它你的最大线程数呢?空闲线程不会带来太多开销,原因是最大连接通常是每个主机最大连接数的倍数。因此,如果我给每个主机的max和相同的max connections都指定max,那么一个连接可能会消耗我线程池中的所有线程。@Gray我们使用的一般想法是我们有一个调用getConnection(String host)的方法,该方法的实现方式是基于主机获取线程,我们对this.connectionpool.getThread()执行一个函数;我现在所做的,就是用currentConnectionPool对象代替connectionpool,如果需要,可以用另一个值替换它。