从Java线程池中删除空闲线程?

mac*_*ery 3 java multithreading executorservice threadpool

我正在使用固定大小的 Java 线程池(ExecutorService)。假设我向线程池提交了一个作业,并且该作业变得空闲。

是否有可能将空闲作业从线程池中删除,以便可以处理队列中的其他作业,然后再次添加空闲作业?

Rav*_*abu 5

如果您从ThreadPoolExecutorExecutorService转移到ThreadPoolExecutor ,您可以使用以下 API 实现它

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

设置核心线程数。这会覆盖构造函数中设置的任何值。如果新值小于当前值,多余的现有线程将在下次空闲时终止。

如果较大,则将在需要时启动新线程来执行任何排队的任务。

如果您想在运行时调整池的大小,

((ThreadPoolExecutor)service).setCorePoolSize(newLimit);//newLimit是池的新大小

其他API:

public void setMaximumPoolSize(int maximumPoolSize)
Run Code Online (Sandbox Code Playgroud)

设置允许的最大线程数。这会覆盖构造函数中设置的任何值。如果新值小于当前值,多余的现有线程将在下次空闲时终止。