动态线程池

Ton*_*ony 4 java multithreading executorservice threadpool threadpoolexecutor

我有一个长时间运行的过程,它监听事件并进行一些密集的处理.

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

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

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

我必须自己实施吗?

Rav*_*abu 6

ThreadPoolExecutor中查看下面的API

public void setCorePoolSize(int corePoolSize)
Run Code Online (Sandbox Code Playgroud)

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

如果新值小于当前值,则当下一个空闲时,多余的现有线程将被终止.

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

初始化:

ExecutorService service = Executors.newFixedThreadPool(5); 
Run Code Online (Sandbox Code Playgroud)

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

((ThreadPoolExecutor)service).setCorePoolSize(newLimit);//newLimit is new size of the pool 
Run Code Online (Sandbox Code Playgroud)

重要的提示:

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

所以设定值maxPoolSizecorePoolSize正确.