如何在 java 中动态调整缓存线程池的大小

How to dynamically resize a cached threadpool in java

我目前正在工作中使用 futures 进行异步线程处理。我希望它的功能与 'cachedThreadPool' 类似,但也可以做这两件事:

  1. 每次线程成功完成时增加允许的最大线程数。

  2. 如果线程抛出异常或超时,则减少允许的最大线程数。

这可以在自定义 ThreadPoolExecutor 中完成吗?我不熟悉以这种方式使用 Executors,所以指出正确的方向对解决这个问题非常有帮助。

应仔细考虑动态调整线程池的大小。如果您有超时并且您的响应是减少线程数,假设任务是可分块的,这可能会使问题变得更糟。

无论如何,这里的代码会在任务抛出异常时更改池的大小,并在任务成功完成时使其变大

class ManagedThreadPoolExecutor extends ThreadPoolExecutor {
      @Override
      protected void afterExecute(Runnable r, Throwable t) {
           if(t != null)
                setMaximumPoolSize(getMaximumPoolSize()-1);
           else
                setMaximumPoolSize(getMaximumPoolSize()+1);

      }
}