3

目前,我正在工作中使用期货进行异步线程处理。我希望它的功能类似于“cachedThreadPool”,但也要做这两件事:

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

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

这可以在自定义中做到ThreadPoolExecutor吗?我不熟悉以这种方式使用 Executors,因此将我指向正确的方向将非常有助于解决这个问题。

4

1 回答 1

2

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

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

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

      }
}
于 2015-03-25T17:14:09.293 回答