目前,我正在使用期货进行异步线程处理。我希望它的功能类似于“ cachedThreadPool”,但还要做以下两件事:
每次成功完成一个线程时,增加允许的最大线程数。
如果线程引发异常或超时,则减少允许的最大线程数。
这可以在风俗习惯中做ThreadPoolExecutor
吗?我对以这种方式使用Executors是陌生的,因此为我指出正确的方向将对解决此问题非常有帮助。
应该仔细考虑动态调整线程池的大小。如果超时,并且您的响应是减少线程数,那么假设任务是可解析的,则可能会使问题变得更糟。
无论如何,这里的代码会在任务引发异常时更改池的大小,并在任务成功完成后使其变大
class ManagedThreadPoolExecutor extends ThreadPoolExecutor {
@Override
protected void afterExecute(Runnable r, Throwable t) {
if(t != null)
setMaximumPoolSize(getMaximumPoolSize()-1);
else
setMaximumPoolSize(getMaximumPoolSize()+1);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句