Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时更改java中池连接管理器中的线程数_Java_Multithreading_Threadpool - Fatal编程技术网

在运行时更改java中池连接管理器中的线程数

在运行时更改java中池连接管理器中的线程数,java,multithreading,threadpool,Java,Multithreading,Threadpool,我正在尝试实现一个项目,该项目使用,池中最多有20个线程。现在,根据流量,我想在运行时更改线程数。有可能吗 我有一个可行的解决方案,我有一组新的线程池,在更改max connections时对其进行初始化,然后替换现有的线程池。一种缓冲开关。但我不确定这是否是最佳解决方案。我假设您现在使用的是Executors.newFixedThreadPool。很遗憾,无法动态调整此池的大小 更好的自适应解决方案是Executors.newCachedThreadPool。请看下面的图片 执行调用将重用以前

我正在尝试实现一个项目,该项目使用,池中最多有20个线程。现在,根据流量,我想在运行时更改线程数。有可能吗


我有一个可行的解决方案,我有一组新的线程池,在更改max connections时对其进行初始化,然后替换现有的线程池。一种缓冲开关。但我不确定这是否是最佳解决方案。

我假设您现在使用的是
Executors.newFixedThreadPool
。很遗憾,无法动态调整此池的大小

更好的自适应解决方案是
Executors.newCachedThreadPool
。请看下面的图片

执行调用将重用以前构造的线程,如果 可用。如果没有可用的现有线程,将创建一个新线程 创建并添加到池中。尚未用于此操作的线程 60秒被终止并从缓存中删除


你能展示一些你的代码来展示你是如何在新的池中交换的吗?为什么不给它你的最大线程数呢?空闲线程不会带来太多开销,原因是最大连接通常是每个主机最大连接数的倍数。因此,如果我给每个主机的max和相同的max connections都指定max,那么一个连接可能会消耗我线程池中的所有线程。@Gray我们使用的一般想法是我们有一个调用getConnection(String host)的方法,该方法的实现方式是基于主机获取线程,我们对this.connectionpool.getThread()执行一个函数;我现在所做的,就是用currentConnectionPool对象代替connectionpool,如果需要,可以用另一个值替换它。