动态线程池

时间:2015-09-11 15:31:07

标签: java multithreading threadpool executorservice threadpoolexecutor

我有一个长时间运行的过程,它会监听事件并进行一些强烈的处理。

目前我使用Executors.newFixedThreadPool(x)来限制同时运行的作业数量,但是根据一天中的时间和其他各种因素,我希望能够动态增加或减少并发数量线程。

如果我减少并发线程数,我希望当前正在运行的作业能够很好地完成。

是否有一个Java库可以让我控制并动态增加或减少线程池中运行的并发线程数? (该类必须实现ExecutorService)。

我必须自己实施吗?

1 个答案:

答案 0 :(得分:5)

ThreadPoolExecutor

中查看以下API
public void setCorePoolSize(int corePoolSize)
  

设置核心线程数。这将覆盖构造函数中设置的任何值。

如果新值小于当前值,则过多的现有线程将在下次空闲时终止。

如果更大,如果需要,将启动新线程以执行任何排队任务。

初始化:

ExecutorService service = Executors.newFixedThreadPool(5); 

根据需要,使用以下API调整线程池

((ThreadPoolExecutor)service).setCorePoolSize(newLimit);//newLimit is new size of the pool 

重要提示:

  

如果队列已满,并且线程数的新值大于或等于之前定义的maxPoolSize,则任务将被拒绝。

因此,请正确设置maxPoolSizecorePoolSize的值。