动态线程池
我有一个长时间运行的过程,可以监听事件并进行一些紧张的处理。
目前我使用Executors.newFixedThreadPool(x)
来限制并发运行的作业数量,但取决于一天的时间和其他各种因素,我希望能够动态增加或减少并发线程数。
如果我减少并发线程的数量,我希望当前正在运行的作业能很好地完成。
是否有一个Java库让我控制并动态增加或减少线程池中运行的并发线程数量? (该类必须实现ExecutorService)。
我必须自己执行它吗?
在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,则任务将被拒绝。
所以正确设置maxPoolSize
和corePoolSize
值。
上一篇: Dynamic Thread Pool